有时候需要在程序里面做分组操作,类似MySQL中的group by
语句。
比如有如下数据:
我们想把它分组成这样的形式:{1=[A, B], 2=[C]}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| public class GroupingByDemo {
@Data static class IdNamePair { private int id; private String name; }
public static void main(String[] args) {
IdNamePair pair = new IdNamePair(); pair.id = 1; pair.name = "A";
IdNamePair pair2 = new IdNamePair(); pair2.id = 1; pair2.name = "B";
IdNamePair pair3 = new IdNamePair(); pair3.id = 2; pair3.name = "C";
List<IdNamePair> list = new ArrayList<>(); list.add(pair); list.add(pair2); list.add(pair3);
Map<Integer, List<String>> map = list.stream() .collect(Collectors.groupingBy(IdNamePair::getId, Collectors.mapping(IdNamePair::getName, Collectors.toList()))); System.out.println(map); } }
|
Collectors.mapping(IdNamePair::getName, Collectors.toList())
相当于再往里面拨一层,取对象里面的一个属性。