JDK1.8Stream根据条件过滤出两个List集合中不一样的数据

2023-05-16

文章目录

  • 前言
    • 1.基础类
    • 2.核心代码
      • 2.1.单条件筛选
      • 2.2.多条件筛选


前言

  • 需求:对两个数据库(一个SqlServer,一个MySQL),同一张表做数据同步,保证两边数据库数据一致

  • 流程:把两个数据库表的数据都捞出来,通过程序过滤筛选出两个表中不一样的数据,然后处理


1.基础类

  • 由于两边表结构都一样,我这边就共用一个表方便测试
@Data
public class SysUser {

    /**
     * 名称
     */
    private String name;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 身高
     */
    private Integer height;
}

2.核心代码

  • 模拟数据
public static void main(String[] args) {
        List<SysUser> list1 = new ArrayList<>();
        SysUser user11 = new SysUser();
        user11.setName("张三");
        user11.setAge(21);
        user11.setHeight(178);
        list1.add(user11);
        SysUser user12 = new SysUser();
        user12.setName("李四");
        user12.setAge(18);
        user12.setHeight(178);
        list1.add(user12);

        List<SysUser> list2 = new ArrayList<>();
        SysUser user22 = new SysUser();
        user22.setName("张三");
        user22.setAge(19);
        user22.setHeight(178);
        list2.add(user22);
        SysUser user24 = new SysUser();
        user24.setName("王五");
        user24.setAge(22);
        user24.setHeight(168);
        list2.add(user24);
        SysUser user25 = new SysUser();
        user25.setName("李四");
        user25.setAge(18);
        user25.setHeight(178);
        list2.add(user25);
    }

2.1.单条件筛选

  • 通过年龄筛选list1不存在list2的数据
//单条件:通过 年龄 过滤
        List<SysUser> collect = list1.stream().filter(s ->
                !list2.stream().map(SysUser::getAge).collect(Collectors.toList()).contains(s.getAge())
        ).collect(Collectors.toList());

        log.info("对比结果:{}", collect);
  • 由于list1中有条age为21,list2中没有age为21的数据,所以list1中的张三这条数据就被筛选出来了

在这里插入图片描述

2.2.多条件筛选

  • 通过姓名、年龄筛选list1不存在list2的数据
//多条件:通过 姓名、年龄 过滤
        List<SysUser> collect = list1.stream().filter(tb ->
                //判断是否有业务主键相同的数据
                list2.stream().filter(t ->
                        t.getName().equals(tb.getName())
                                && t.getAge().equals(tb.getAge())
                ).findFirst().orElse(null) == null
        ).collect(Collectors.toList());
        log.info("对比结果:{}", collect);
  • 由于list1中有条name为张三、age为21,list2中没有同时满足这两个条件的数据,所以list1中的张三这条数据就被筛选出来了

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDK1.8Stream根据条件过滤出两个List集合中不一样的数据 的相关文章

  • 向 list.extend() 传递不可迭代对象

    我正在创建一个公共方法来允许调用者将值写入设备 例如将其称为 write vals 由于这些值将实时输入 因此我希望通过允许用户输入列表或单个值来简化用户的生活 具体取决于他们需要写入的值的数量 例如 write to device 1 2
  • 比较通用列表和数组

    为什么 generic list 比 array 慢 通用列表比数组稍慢 但在大多数情况下您不会注意到 主要与稍微复杂的查找有关 据说 List 在幕后 使用数组 但不能保证以与数组相同的方式将节点保留在相邻内存中 然而 我早在 2005
  • Python如何拆分列表列表?

    我有一个清单清单 myList 1 2 3 4 5 6 7 8 9 10 我想将其分成三个单独的列表 每个列表都有自己的名称 a 1 2 3 b 4 5 6 c 7 8 9 10 我该怎么做呢 您可以直接解压它 a b c myList
  • Android 动态添加联系表单

    Hi 我想实现如图所示的表单 不知道他们如何动态添加字段 这是列表视图吗 可扩展列表 用户可以在运行时添加和删除 我已经检查了包含子项目的可扩展列表 但我们在数组中定义子元素 在图像中它们动态添加 任何指南 链接 Thanks Custom
  • 有没有办法查看 OSGi 应用程序中注册的服务?

    我有一个运行 Equinox 的 OSGi 应用程序 我想查看该应用程序提供的服务 我怎样才能做到这一点 从 gogo shell 类型 inspect cap service 这将显示所有捆绑包注册的所有服务 如果您想显示特定捆绑包的服务
  • python 中的基本矩阵转置

    我尝试了 python 中矩阵转置的最基本方法 但是 我没有得到所需的结果 接下来是代码 A 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 print A def TS A B A for i in range len A
  • 如何将 Pandas Dataframe 中的字符串转换为字符列表或数组?

    我有一个名为的数据框data 其中一列包含字符串 我想从字符串中提取字符 因为我的目标是对它们进行一次性编码并使之可用于分类 包含字符串的列存储在预测因子如下 predictors pd DataFrame data columns Seq
  • 如何加快列表理解速度

    以下是我的清单 col red yellow blue red green yellow pink orange brown pink brown 我的目标是消除每个列表中出现一次的项目 这是我的代码 eliminate w for w i
  • 是否有一个 jquery List 插件可以自动排序项目并具有强大的添加/删除方法?

    我已经在谷歌上搜索了几个小时 寻找一些东西来处理我的情况 我还不够熟练 无法编写自己的 jquery 插件 该插件应该自动对列表进行排序 这并不像能够轻松地从列表中添加 删除项目那么重要 Themeroller 功能将是一个优点 我基本上会
  • 在 any() 语句中迭代一个小列表是否更快?

    在低长度迭代的限制下考虑以下操作 d 3 slice None None None slice None None None In 215 timeit any type i slice for i in d 1000000 loops b
  • 以特定方式填充列表

    我需要填充一个包含 5 个位置的列表 new list 我收到 2 个列表 并且有一个默认值来填充新列表 现在开始解决问题 好的方式是 我从列表中接收 2 个值 从列表中接收 2 个值并添加默认值 A1 A2 DEFAULT B1 B2 但
  • Python 有不可变列表吗?

    python 有不可变列表吗 假设我希望具有元素有序集合的功能 但又想保证它不会改变 如何实现呢 列表是有序的 但它们可以改变 是的 它被称为一个tuple 所以 而不是 1 2 这是一个list并且可以突变 1 2 is a tuple并
  • 如何使用 tweepy 仅提取主题标签中的文本?

    我想为我的情感分析项目提取主题标签 但是我得到了一个字典列表 其中包含所有主题标签及其在推文中的索引 我只想要文字 我的代码 data tweepy Cursor api search q since a i until b i items
  • Python range() 和 zip() 对象类型

    我了解功能如何range and zip 可以在 for 循环中使用 然而我期望range 输出一个列表 很像seq在 Unix shell 中 如果我运行以下代码 a range 10 print a 输出是range 10 表明它不是一
  • 如何从Python列表中的字符串中删除双引号?

    我正在尝试在字典列表中获取一些数据 数据来自 csv 文件 因此都是字符串 文件中的键都有双引号 但由于这些都是字符串 我想删除它们 这样它们在字典中看起来像这样 key value 而不是这个 key value 我尝试简单地使用 str
  • 如何在 JavaFX 中连接可观察列表?

    我所说的串联是指获得一个新列表 该列表侦听所有串联部分的更改 方法的目的是什么FXCollections concat ObservableList
  • R:ifelse 中的字符串列表

    我正在寻找与 MySQL 中的 where var in 语句类似的东西 我的代码如下 data lt data frame id 10001 10030 cc1 rep c a b c 10 attach data data new lt
  • “Iterable 无法转换为 List” - `List` 不是 `Iterable` 的类型吗?

    我打电话给一个getElements返回的方法Iterable
  • 查找列表中项目的索引

    给定一个列表 foo bar baz 和列表中的一个项目 bar 如何获取它的索引1 gt gt gt foo bar baz index bar 1 See 文档 https docs python org tutorial datast
  • Collections.sort(list) 和 list.sort(Comparator) 之间的区别

    有什么理由让我应该选择Collections sort list 方法而不是简单地调用list sort 内部Collections sort只是调用sort的方法List无论如何 上课 令人惊讶的是几乎每个人都告诉我使用Collectio

随机推荐