我有一个对象列表list
public class WorkingActivityModel {
private String name;
private Sales sales;
private Shifts shifts;
}
销售模式为:
public class Sales {
private int product1;
private int product2;
}
轮班模式为:
public class Shifts {
private int shift1;
private int shift2;
}
如何按名称对list
中的项目进行分组,然后对相应的销售和班次进行求和?所以,如果我在列表中有两个名称相同的项目,那么将它们分组,并求和其销售额和移动量?
我尝试过stream,但没有成功:
List<WorkingActivityModel> result = mList.stream()
.collect(groupingBy(WorkingActivityModel::getName, LinkedHashMap::new, toList()))
.values().stream()
.flatMap(Collection::stream)
.collect(toList());
另一种选择是:
List<WorkingActivity> mList = new ArrayList<>();
HashMap<String, List<WorkingActivityModel>> map = new HashMap<>();
for(WorkingActivityModel o : mList){
if (!map.containsKey(o.getKey())) {
List<WorkingActivityModel> list = new ArrayList<>();
list.add(o);
map.put(o.getKey(), list);
} else {
map.get(o.getKey()).add(o);
}
}
在这种情况下,我不知道如何求和相应的销售额和班次
编辑
下面是预期结果的示例:
您可以使用定义的自定义合并操作来实现这一点,这样执行tomap
就会稍微容易一些。
Collection<WorkingActivityModel> result = mList.stream()
.collect(Collectors.toMap(WorkingActivityModel::getName, Function.identity(),
(a, b) -> WorkingActivityModel.mergeModels(a, b))) // WorkingActivityModel::mergeModels
.values();
mergeModels
是我在workingactivitymodel
类中定义的一个静态方法,例如它处理合并两个名称相似的模型的逻辑。
static WorkingActivityModel mergeModels(WorkingActivityModel model1, WorkingActivityModel model2) {
return new WorkingActivityModel(model1.name,
Sales.mergeSales(model1.sales, model2.sales),
Shifts.mergeShifts(model1.shifts, model2.shifts));
}
当然,mergesales
和mergeshifts
遵循相同的模式,实现起来很简单。
给定一个< code>java.util.List和< code>n个元素以及一个期望的页面大小< code>m,我想将它转换成一个包含< code>n/m n%m个元素的映射。每个地图元素应包含< code>m个元素。 这里有一个整数的例子: 使用Java 8,这是可能的吗?
问题内容: 给定一个with 元素和所需的页面大小,我想将其转换为包含元素的地图。每个地图元素应包含元素。 这是一个整数示例: 使用Java 8可以吗? 问题答案: 您可以将其与收集器和方法结合使用(感谢Duncan的简化)。 首先,您需要计算地图中所需的键数。这是通过(这是流的限制)给出的。 然后,您创建一个创建序列的Stream 。 现在,对于每个值,您将抓住对应的值,这将是我们的值(您需要对
本文向大家介绍在Java中使用Collections.reverseOrder()对ArrayList的项目进行排序,包括了在Java中使用Collections.reverseOrder()对ArrayList的项目进行排序的使用技巧和注意事项,需要的朋友参考一下 为了在Java中使用Collections.reverseOrder()对ArrayList的项目进行排序,我们需要使用Collec
问题内容: 我具有以下数据结构(列表列表) 我希望能够 使用函数对列表重新排序,以便我可以按列表中的每个项目分组。例如,我希望能够按第二列分组(以便所有21列在一起) 使用函数仅显示每个内部列表中的某些值。例如,我想减少此列表,使其仅包含“ 2somename”的第四个字段值 所以列表看起来像这样 问题答案: 对于第一个问题,您应该做的第一件事是使用运算符模块中的itemgetter按第二个字段对
使用以下代码: 我得到: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23。 我想做的是每 10 个项目中断一次行,以便获得: 0,1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23. 我在谷歌搜索后尝试了很多事情,但都没有成功!你能帮助我吗? 谢谢 奥
问题内容: 是否可以在Python中以以下方式迭代列表(将此代码作为伪代码进行处理)? 它应该产生 问题答案: 从食谱: