/***@authorindex
* @date 2020/10/27
**/
public classTestcollectingAndThen {
@Testpublic voidtest(){final int NUM = 14;
List peopleList = new ArrayList<>(NUM);
String[] names= {"小张", "小龙", "小牛", "小猪", "小黑", "小红", "小白"};for (int i = 0; i < 5; i++) {//添加5个19岁的随机性别和名字的小朋友
peopleList.add(new People(19, (int) (Math.random() * 2), names[(int) (Math.random() *names.length)]));
}for (int i = 5; i < 8; i++) {//添加3个31岁的随机性别和名字的小朋友
peopleList.add(new People(31, (int) (Math.random() * 2), names[(int) (Math.random() *names.length)]));
}for (int i = 8; i < NUM; i++) {//添加6个22岁的随机性别和名字的小朋友
peopleList.add(new People(22, (int) (Math.random() * 2), names[(int) (Math.random() *names.length)]));
}//collectingAndThen先对stream里的元素进行collecting,之后再对结果进行操作,//下面的结果是一个map,对map计算元素数目
System.out.println("分组数目:");
Integer groupCount=peopleList.stream().collect(
Collectors.collectingAndThen(Collectors.groupingBy(People::getName), Map::size));
System.out.println(groupCount);
System.out.println("-------------------------------------");//按照名字分组
System.out.println("按照名字分组");
System.out.println(
peopleList.stream().collect(Collectors.groupingBy(People::getName))
);
System.out.println("-------------------------------------");//按照名字分组(分组的结果是一个map),并统计每一个分组(map中的每一个value)中的元素数目
System.out.println("统计每一个分组(map中的每一个value)中的元素数目");
System.out.println(
peopleList.stream().collect(Collectors.groupingBy(People::getName, Collectors.counting()))
);
System.out.println("-------------------------------------");//按照名字分组(分组的结果是一个map),并取出每一组的最大值
System.out.println("取出每一组的最大值");
System.out.println(
peopleList.stream().collect(Collectors.groupingBy(People::getName, Collectors.maxBy(new Comparator() {
@Overridepublic intcompare(People o1, People o2) {return o1.getAge() -o2.getAge();
}
})))
);
}
}