当前位置: 首页 > 知识库问答 >
问题:

Java8:将sql group之类的元素列表减少如下

常飞翼
2023-03-14
[["1","a",20],
 ["1","b",10],
 ["2","a",10],
 ["2","b",30]]
[["1", 30],
 ["2", 40]]

对不起,如果这是显而易见的一些你们,但我还没有找到任何例子,如何实现这一点。我以为这可以通过Stream.Reduce(U恒等式、双吸累加器、BinaryOperator组合器)来完成,但到目前为止我还没有成功。如果有人能为此提供一些示例代码,我相信它也会受到许多其他人的赞赏。

共有1个答案

丁勇
2023-03-14

以下代码可能会有所帮助:

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,但它只是映射订单