V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stevenkang
V2EX  ›  Java

有什么办法可以快速的比较两个数组差异

  •  
  •   stevenkang · 121 天前 · 1463 次点击
    这是一个创建于 121 天前的主题,其中的信息可能已经有所发展或是发生改变。

    环境:java8,springboot 项目

    想过用 stream filter 过滤,但遇到一个问题,可能数组中允许重复值,

    例如:[A, B, B, C] 和 [B, B, B, C, D] 两个数组,现在想把多余的和缺少的找出来,

    这里的结果应该是:缺少 1 个 A,多余 1 个 B 和 D

    Java 有啥优雅的办法快速比较出来呢,或者有啥现成 util 没。

    11 条回复    2020-11-16 17:34:33 +08:00
    liuxiaohua
        1
    liuxiaohua   121 天前
    自己写二个方法得了
    chendy
        2
    chendy   121 天前   ❤️ 8
    做个 字母 -> 次数 的 map,遍历前一个做加法,后一个做减法,过滤掉次数 0 的,剩下的就是差异了
    SuperMari0
        3
    SuperMari0   121 天前
    分别对两个数组 GroupBy 再针对 GroupBy 的结果进行比较???
    SuperMari0
        4
    SuperMari0   121 天前
    @chendy 看了你的办法突然想起来好像刷过这道算法题🤣
    azcvcza
        5
    azcvcza   121 天前
    用 set ? js 里就新建两个 set,然后用这两个 set 求交集,求差集
    MoYi123
        6
    MoYi123   121 天前
    有这发帖的时间,你自己写一个都写完了。
    user8341
        7
    user8341   121 天前
    二楼都已经给出思路了。
    luckylo
        9
    luckylo   112 天前
    思路是二楼的,工具类也有,不过比较重量级。
    我前阵子做审计日志用了那个工具,用来比较 对象前后变化的值,可以满足你的需求。

    关键字 javers
    agentFitzzzzz
        10
    agentFitzzzzz   106 天前
    google 提供的 guava 类库可以求数组的差集 并集 交集
    agentFitzzzzz
        11
    agentFitzzzzz   103 天前
    HashSet setA = Sets.newHashSet(1,2,3,4,5);
    HashSet setB = Sets.newHashSet(4,5,6,7,8);

    Sets.SetView union = Sets.union(setA, setB); //并集,不会影响原集合内容
    System.out.println(union);
    System.out.println(setA);

    Sets.SetView difference = Sets.difference(setA, setB); //差集 A 差 B
    System.out.println(difference);

    Sets.SetView intersection = Sets.intersection(setA, setB); //交集
    System.out.println(intersection);
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1082 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 17ms · UTC 22:27 · PVG 06:27 · LAX 14:27 · JFK 17:27
    ♥ Do have faith in what you're doing.