java8对list中属性去重
User类对象
@Data
public class User {
private int id;
private String name;
}
1.直接使用TreeSet
private List<User> removeRepeatByName(List<User> user) {
Set<User> personSet = new TreeSet<User>((o1, o2) -> o1.getName().compareTo(o2.getName()));
personSet.addAll(user);
return new ArrayList<UserCar>(personSet);
}
2.java8结合TreeSet
List<User> unique = users.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(User::getName))), ArrayList::new)
);
unique.forEach(p -> System.out.println(p));
3.使用java8的filter过滤
List<String> names = new ArrayList<>();
List<User> userList = users.stream().filter(
v -> {
boolean flag = !names.contains(v.getName());
names.add(v.getName());
return flag;
}
).collect(Collectors.toList());