Java合并两个List并去掉重复项

今天在工作中遇到了需要将两个List<String>合并成一个,并去重的功能点。这种需求点很少,但是还真会出现。

下面给大家展示下我是怎么实现的

方法一:使用HashSet

java 复制代码
    public static void main(String[] args) {
//        String[] arr1 = {"str3", "str1", "str2"};
//        List<String> list1 = new ArrayList<>(Arrays.asList(arr1));
        List<String> list1 = new ArrayList<>();
        list1.add("str3");
        list1.add("str1");
        list1.add("str2");

        List<String> list2 = new ArrayList<>();
        list2.add("str3");
        list2.add("str2");
        list2.add("str4");

        Set<String> set = new HashSet<>(list1);
        set.addAll(list2);
        List<String> list = new ArrayList<>(set);
        System.out.println(list);
}
// 输出结果为:
// [str3, str4, str1, str2]

可以看出,使用HashSet是不排序的,顺序可能会乱

方法二:使用Stream进行去重,但是仅支持JDK1.8及以上

java 复制代码
    public static void main(String[] args) {
//        String[] arr1 = {"str3", "str1", "str2"};
//        List<String> list1 = new ArrayList<>(Arrays.asList(arr1));
        List<String> list1 = new ArrayList<>();
        list1.add("str3");
        list1.add("str1");
        list1.add("str2");

        List<String> list2 = new ArrayList<>();
        list2.add("str3");
        list2.add("str2");
        list2.add("str4");
        
        List<String> collect = Stream.of(list1, list2)
                .flatMap(Collection::stream)
                .distinct()
                .collect(Collectors.toList());
        System.out.println(collect);
    }

// 输出
// [str3, str1, str2, str4]

比较小众的写法,但是真的好用,而且看起来更简洁

相关推荐
南客先生1 分钟前
深入解析:RocketMQ、RabbitMQ和Kafka的区别与使用场景
java·kafka·消息队列·rabbitmq·rocketmq
caihuayuan44 分钟前
【docker&redis】用docker容器运行单机redis
java·大数据·sql·spring·课程设计
我是苏苏6 分钟前
消息中间件RabbitMQ02:账号的注册、点对点推送信息
开发语言·后端·ruby
写bug写bug24 分钟前
Java并发编程:优雅的关闭钩子(Shutdown Hook)
java·后端
工藤新一¹24 分钟前
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 14)
开发语言·c++·游戏引擎·游戏开发·sdl·实践项目
钢铁男儿32 分钟前
C#核心技术解析:静态类型、dynamic与可空类型
开发语言·c#
码熔burning1 小时前
【MQ篇】RabbitMQ之消费失败重试!
java·分布式·rabbitmq·mq
Haoea!1 小时前
java-mybatis01
java·数据库·oracle
zandy10111 小时前
衡石科技:HENGSHI SENSE 数据权限解决方案
java·数据库·科技
卓越进步1 小时前
层级时间轮的 Golang 实现原理与实践
开发语言·后端·golang