Function<T,R>
compose用来处理入参T
andThen用来处理出参R
具体例子
@Data
class User{
private Long id;
private String name;
private Integer age;
private String gender;
}
public static void getAgeMap(List<User> users){
//收集年龄为20的用户信息
Map<Long,String> ageMap = users.stream()
.filter(user -> user.getAge().compareTo(20) == 0)
.collect(Collectors.toMap(User::getId,User::getName));
//收集年龄不为20的用户信息
Map<Long,String> ageMap2 = users.stream()
.filter(user -> user.getAge().compareTo(20) != 0)
.collect(Collectors.toMap(User::getId,User::getName));
}
public static void getAgeMap2(List<User> users){
Function<Predicate<User>,Map<Long,String>> func =
pfunc -> users.stream()
.filter(pfunc)
.collect(Collectors.toMap(User::getId,User::getName));
Function<Integer,Predicate<User>> func2 =
i -> (user -> user.getAge().compareTo(i) == 0);
//收集年龄为20的用户信息
Map<Long,String> ageMap = func.compose(func2).apply(20);
//年龄为20的人数
Integer count = func
.compose(func2)
.andThen(map -> map.size())
.apply(20);
//收集年龄不为20的用户信息
Map<Long,String> ageMap2 = func.apply(func2.apply(20).negate());
}