[["1","a",20],
["1","b",10],
["2","a",10],
["2","b",30]]
[["1", 30],
["2", 40]]
对不起,如果这是显而易见的一些你们,但我还没有找到任何例子,如何实现这一点。我以为这可以通过Stream.Reduce(U恒等式、双吸累加器、BinaryOperator组合器)来完成,但到目前为止我还没有成功。如果有人能为此提供一些示例代码,我相信它也会受到许多其他人的赞赏。
以下代码可能会有所帮助:
List<List<Object>> originalList = Arrays.asList(
Arrays.asList("1", "a", 20),
Arrays.asList("1", "b", 10),
Arrays.asList("2", "a", 10),
Arrays.asList("2", "b", 30)
);
final Map<Object, Integer> collectedMap =
originalList.stream()
.collect(Collectors.groupingBy(
e -> e.get(0),
Collectors.summingInt(e -> (Integer) e.get(2))));
System.out.println(collectedMap);
输出为:
{1=30,2=40}
final List<List<Object>> collectedList =
collectedMap.entrySet()
.stream()
.map(e -> Arrays.asList(e.getKey(), e.getValue()))
.collect(Collectors.toList());
System.out.println(collectedList);
我的问题基本上归结为将列表减少为链表,但从reduce函数推断出的类型似乎不正确。 我的列表如下所示 我希望reduce函数在每个reduce步骤中都能做到这一点 然而,减少函数似乎认为这不起作用,因为我猜它不认为身份是节点。 这是我的密码。 我做错了什么? 在接受答案后编辑,我的代码如下所示: 现在打印出来了 我仍然不知道为什么Java不能告诉减少函数的第三个参数是不必要的,它永远不会被调用,但
问题内容: Collector的Javadoc显示了如何将流的元素收集到新的List中。有没有一种将结果添加到现有ArrayList中的方法? 问题答案: 注意: osid的答案 显示了如何使用来添加到现有集合。这是对现有集合进行变异的有用且有效的技术。我的答案解决了为什么您不应该使用A 来突变现有集合的原因。 简短的答案是 no ,至少在一般情况下不是这样,您不应该使用a 来修改现有集合。 原因
Collector的Javadoc展示了如何将流的元素收集到一个新列表中。是否有一个单行程序将结果添加到现有的ArrayList中?
我有以下几门课: 我有一个物品清单。我想遍历列表并找到具有特定ID的实例。我试着通过溪流来做。
有一个简单的: 以及任务对象的列表。如何通过使用获得每个作为的列表。我试过这个: 但它返回
我有客户对象的列表。我想迭代列表并按1递增顺序。 我尝试了每个列表,但在这里我必须创建新列表并在其中添加值。 有没有更好的方法?我尝试使用streams,但它只是映射订单