collect
- 组合,返回对应的类型,包括list,set,treeset ,map 等
List<String> numbers = Arrays.asList("b","a");
numbers = numbers.stream().sorted().collect(Collectors.toList());
List<lambdaDemo> lambdaDemos = Arrays.asList(new lambdaDemo("zhang","bing",1),
new lambdaDemo("li","hua",2));
Map<Integer,String> maps = lambdaDemos.stream().collect(Collectors.toMap(lambdaDemo::getAge,lambdaDemo::getName));
System.out.println(maps);
//以年龄为唯一值,
public static Map<Integer,lambdaDemo> check(List<lambdaDemo> lambdaDemos){
return lambdaDemos.stream().collect(Collectors.toMap(lambdaDemo::getAge, Function.identity(),
(existing, replacement) -> existing));
}
分组和分区
- Collectors.groupingBy()对元素做group操作。
- Collectors.partitioningBy()对元素进行二分区操作。
public static void test9() {
List<lambdaDemo> lambdaDemos = Arrays.asList(new lambdaDemo("zhang","黑人",65),
new lambdaDemo("li","黑人",40),
new lambdaDemo("liu","白人",40));
System.out.println("=======根据人的肤色进行分组==========================");
Map<String, List<lambdaDemo>> map = lambdaDemos.stream().collect(Collectors.groupingBy(lambdaDemo::getName));
System.out.println(map);
System.out.println("=======根据人的年龄范围多级分组==========================");
Map<Integer, Map<String, List<lambdaDemo>>> map2 = lambdaDemos.stream().collect(Collectors.groupingBy(lambdaDemo::getAge,
Collectors.groupingBy(
( p ) -> {
if ( p.getAge() > 60 ) {
return "老年人";
} else {
return "年轻人";
}
}
)
));
System.out.println(map2);
}
public static void test10() {
List<lambdaDemo> lambdaDemos = Arrays.asList(new lambdaDemo("zhang","黑人",60),
new lambdaDemo("li","黑人",2),
new lambdaDemo("liu","白人",3));
System.out.println("========根据人的年龄是否大于40进行分区========================");
Map<Boolean, List<lambdaDemo>> map = lambdaDemos.stream().collect(Collectors.partitioningBy(p -> p.getAge() > 40));
System.out.println(map);
}