主要是使用collect这一api,具体方法有两种,请参考下面的示例
@Data
@AllArgsConstructor
class A{
String productId;
String id;
}
@Test
public void test(){
A a1 = new A("1", "001");
A a2 = new A("1", "002");
A a3 = new A("1", "003");
A a4 = new A("2", "004");
A a5 = new A("2", "005");
A a6 = new A("3", "006");
ArrayList<A> as = new ArrayList<>(Arrays.asList(a1,a2,a3,a4,a5,a6));
// 1.使用groupingBy实现
Map<String, List<A>> collect1 = as.stream().collect(Collectors.groupingBy(A::getProductId));
collect1.forEach((k,v)->{
System.out.println(k+": "+v);
});
System.out.println("==========");
// 2.使用toMap实现
Map<String, List<String>> collect2 = as.stream().collect(Collectors.toMap(A::getProductId, s -> {
List<String> list = new ArrayList<>();
list.add(s.id);
return list;
}, (_old, _new) -> {
_old.addAll(_new);
return _old;
}));
collect2.forEach((k,v)->{
System.out.println(k+": "+v);
});
}
程序输出如下:
1: [A(productId=1, id=001), A(productId=1, id=002), A(productId=1, id=003)]
2: [A(productId=2, id=004), A(productId=2, id=005)]
3: [A(productId=3, id=006)]
==========
1: [001, 002, 003]
2: [004, 005]
3: [006]