public static void main(String[] args) {
List<User> list=new ArrayList<>();
User user = new User();
user.setPassword("1242");
user.setNickName("xkk");
user.setType("sucess");
User user1 = new User();
user1.setPassword("1242");
user1.setNickName("xkk");
user1.setType("faile");
User user2 = new User();
user2.setPassword("666");
user2.setNickName("xqq");
user2.setType("dis");
list.add(user);
list.add(user1);
list.add(user2);
list.stream().
filter(distinctByKey(new Function<User, Object>() {
@Override
public Object apply(User user) {
return user.getPassword()+":"+user.getNickName();
}
})).collect(Collectors.toList());
}
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new HashMap<>();
System.out.println("调用次数.........");
return new Predicate<T>() {
@Override
public boolean test(T t) {
return seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) ==null;
}
};
}
问题是distinctByKey 方法中的Map为什么之声明了一次