前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >获取两个list中相互不包含的部分

获取两个list中相互不包含的部分

作者头像
阿超
发布2022-08-21 11:08:36
1.5K0
发布2022-08-21 11:08:36
举报
文章被收录于专栏:快乐阿超快乐阿超
img
img

代码如下:提供了几种方法(自个写的)

代码语言:javascript
复制

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

class Scratch {
    public static void main(String[] args) {

        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);

        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list1.add(3);
        list1.add(4);
        list1.add(8);
        list1.add(9);

        // 从list中过滤出list1不包含的
        List<Integer> reduce1 = list.stream().filter(item -> !list1.contains(item)).collect(Collectors.toList());
        // 从list1中过滤出list不包含的
        List<Integer> collect = list1.stream().filter(item -> !list.contains(item)).collect(Collectors.toList());
        // 连接起来
        reduce1.addAll(collect);

        // 预期结果[5,6,8,9]
        List<Integer> result = Stream.concat(list.stream().filter(item -> !list1.contains(item)), list1.stream().filter(item -> !list.contains(item))).collect(Collectors.toList());

        System.out.println(result);
    }

    public static List<Integer> subListRemoveAll(List<Integer> list1, List<Integer> list2) {
        List<Integer> list = new ArrayList<>(list1);
        list1.removeAll(list2);
        list2.removeAll(list);
        list1.addAll(list2);
        return list1;
    }

    public static List<Integer> subListRetainAll(List<Integer> list1, List<Integer> list2) {
        List<Integer> list = new ArrayList<>(list1);
        list.retainAll(list2);
        list1.addAll(list2);
        list1.removeAll(list);
        return list1;
    }

    public static List<Integer> subListStream(List<Integer> list1, List<Integer> list2) {
        return Stream.concat(list1.stream(), list2.stream()).filter(i -> !list1.contains(i) || !list2.contains(i)).collect(Collectors.toList());
    }

    public static List<Integer> subListCollect(List<Integer> list1, List<Integer> list2) {
        return Stream.concat(list1.stream(), list2.stream()).collect(ArrayList::new, (l, v) -> Optional.of(!list1.contains(v) || !list2.contains(v)).filter(i -> i).ifPresent(p -> l.add(v)), ArrayList::addAll);
    }

    public static List<Integer> subListPartitioningBy(List<Integer> list1, List<Integer> list2) {
        return Stream.concat(list1.stream(), list2.stream()).collect(Collectors.partitioningBy(v -> !list1.contains(v) || !list2.contains(v))).getOrDefault(true, Collections.emptyList());
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档