环境:java8,springboot 项目
想过用 stream filter 过滤,但遇到一个问题,可能数组中允许重复值,
例如:[A, B, B, C] 和 [B, B, B, C, D] 两个数组,现在想把多余的和缺少的找出来,
这里的结果应该是:缺少 1 个 A,多余 1 个 B 和 D
Java 有啥优雅的办法快速比较出来呢,或者有啥现成 util 没。
![]() |
1
liuxiaohua 121 天前
自己写二个方法得了
|
![]() |
2
chendy 121 天前 ![]() 做个 字母 -> 次数 的 map,遍历前一个做加法,后一个做减法,过滤掉次数 0 的,剩下的就是差异了
|
3
SuperMari0 121 天前
分别对两个数组 GroupBy 再针对 GroupBy 的结果进行比较???
|
4
SuperMari0 121 天前
@chendy 看了你的办法突然想起来好像刷过这道算法题🤣
|
5
azcvcza 121 天前
用 set ? js 里就新建两个 set,然后用这两个 set 求交集,求差集
|
![]() |
6
MoYi123 121 天前
有这发帖的时间,你自己写一个都写完了。
|
![]() |
7
user8341 121 天前
二楼都已经给出思路了。
|
9
luckylo 112 天前
思路是二楼的,工具类也有,不过比较重量级。
我前阵子做审计日志用了那个工具,用来比较 对象前后变化的值,可以满足你的需求。 关键字 javers |
10
agentFitzzzzz 106 天前
google 提供的 guava 类库可以求数组的差集 并集 交集
|
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); |