关于 Java 利用 Stream 处理 ArrayList 集合的去重方案

原创 HuangLongPu     发表于  2022-04-22 09:53       8
原文链接:

本文主要采用 Java 利用 Stream 处理 ArrayList 集合的去重方案,其他的处理方式也很多,例如 HashSet、HashMap 等,下面的方案仅供参考。

注:如果集合为bean对象,不能采用 distinct 的处理方案,可以参考第二种方案的写法

参考代码如下:

import lombok.Getter;
import lombok.Setter;

import java.util.*;
import java.util.stream.Collectors;

public class ListArrayTest {

    // 关于 Java 利用 Stream 处理 ArrayList 集合的去重方案
    public static void main(String[] args) {
		    // 方案一:
        List<String> list = Arrays.asList("A", "B", "C", "D", "C", "A", "B", "E");
        System.out.println("去重前长度 >> " + list.size());
        long size = list.stream().distinct().count();
        System.out.println("去重后长度 >> " + size);
        List<String> collect = list.stream().distinct().collect(Collectors.toList());
        System.out.println(collect);

				// 注:如果集合为bean对象,不能采用 distinct 的处理方案,可以参考第二种方案的写法
				// 方案二
        List<UserInfo> userInfoList = new ArrayList<>();
        UserInfo userInfo1 = new UserInfo();
        userInfo1.setId(1);
        userInfo1.setUserName("小明");
        userInfoList.add(userInfo1);

        UserInfo userInfo2 = new UserInfo();
        userInfo2.setId(2);
        userInfo2.setUserName("小红");
        userInfoList.add(userInfo2);

        UserInfo userInfo3 = new UserInfo();
        userInfo3.setId(1);
        userInfo3.setUserName("小明");
        userInfoList.add(userInfo3);

        // 根据属性 id 为去重依据
        userInfoList = userInfoList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
                // 利用 TreeSet 的排序去重构造函数来达到去重元素的目的
                () -> new TreeSet<>(Comparator.comparing(UserInfo::getId))), ArrayList::new));

        System.out.println("去重后 bean 集合的长度 >> " + userInfoList.size());
    }
}

@Getter
@Setter
class UserInfo {
    private int id;
    private String userName;
}

输出结果:

去重前长度 >> 8
去重后长度 >> 5
[A, B, C, D, E]
去重后 bean 集合的长度 >> 2

Process finished with exit code 0

相关文章

HuangLongPu
5
25042/45000
文章数
184
阅读量
99027
原创
142
广告
公众号
QQ讨论群