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

2020-10-29 15:19:22 +08:00
 stevenkang

环境:java8,springboot 项目

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

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

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

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

3026 次点击
所在节点    Java
11 条回复
liuxiaohua
2020-10-29 15:21:23 +08:00
自己写二个方法得了
chendy
2020-10-29 15:24:43 +08:00
做个 字母 -> 次数 的 map,遍历前一个做加法,后一个做减法,过滤掉次数 0 的,剩下的就是差异了
SuperMari0
2020-10-29 15:25:55 +08:00
分别对两个数组 GroupBy 再针对 GroupBy 的结果进行比较???
SuperMari0
2020-10-29 15:27:30 +08:00
@chendy 看了你的办法突然想起来好像刷过这道算法题🤣
azcvcza
2020-10-29 15:36:39 +08:00
用 set ? js 里就新建两个 set,然后用这两个 set 求交集,求差集
MoYi123
2020-10-29 15:45:06 +08:00
有这发帖的时间,你自己写一个都写完了。
user8341
2020-10-29 16:58:00 +08:00
二楼都已经给出思路了。
Alan0000
2020-11-03 15:12:47 +08:00
luckylo
2020-11-07 15:14:43 +08:00
思路是二楼的,工具类也有,不过比较重量级。
我前阵子做审计日志用了那个工具,用来比较 对象前后变化的值,可以满足你的需求。

关键字 javers
agentFitzzzzz
2020-11-13 16:57:22 +08:00
google 提供的 guava 类库可以求数组的差集 并集 交集
agentFitzzzzz
2020-11-16 17:34:33 +08:00
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);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719809

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX