java 8 stream group by two columns

时间:2015-12-10 14:06:18

标签: java-8 java-stream

所以我有一个班级:

    List<AA> list = new ArrayList<>();
    list.add(new AA(1, "1TEXT", "one"));
    list.add(new AA(2, "1TEXT", "two"));
    list.add(new AA(3, "2TEXT", "three"));
    list.add(new AA(1, "2TEXT", "four"));
    list.add(new AA(1, "2TEXT", "one"));

我创建了一个列表:

 * number 1 : - one
              - four
 * number 2 : - two
 * number 3 : - three

我想通过列分组:数字和其他来获取如下信息:

Map<Integer,List<AA>> ss = list.stream().collect(Collectors.groupingBy(AA::getNumber));
Map<Integer, List<String>>

上面的代码将通过数字来实现.... 如何使用两列进行分组?

编辑: 我想得到

webkit
  • 在List中我们有“其他”字段

1 个答案:

答案 0 :(得分:4)

我不认为你正在寻找第二个&#34;&#34;通过...分组。您需要的只是映射按AA属性分组的other个实例。您可以使用下游收集器mapping来实现此目的。

查看所需的输出,您似乎需要Set<String>作为值,而不是List s。

import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toSet;

...

Map<Integer, Set<String>> map = 
    list.stream()
        .collect(groupingBy(AA::getNumber, mapping(AA::getOther, toSet())));