java8 stream流给List对象根据key值去重

284 阅读1分钟

1.需要引入两个静态方法

  经常遇到需要给list去重,除了常用的set方法外,用java8中的stream流更为的便捷,因此记录了下来

// 引入了两个静态方法,以及通过 TreeSet<> 来达到获取不同元素的效果
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;
// 初始化
List<User> userList = new ArrayList<User>() {{
        add(new User(1L, "张一", "男"));
        add(new User(1L, "张一", "男"));
        add(new User(2L, "张二", "男"));
        add(new User(3L, "张三", "男"));
        add(new User(4L, "张四", "女"));
        add(new User(4L, "张四", "男"));
        add(new User(5L, "张五", "男"));
        add(new User(5L, "张六", "男"));
        add(new User(5L, "张七", "男"));
}};
 
// 筛选,根据User对象ID属性去重,并创建新的集合存放筛选过后的对象
List<User> collect = userList.stream().collect(
        collectingAndThen(
                toCollection(() -> new TreeSet<>(Comparator.comparing(User::getId))),
                        ArrayList::new
                )
);
 
// 打印
for (User user : collect) {
        System.out.println("user = " + user);
}