This topic created in 2841 days ago, the information mentioned may be changed or developed.
业务需求,List 包含了每天的日期(例如:20180101),但是有的 List 中并不是连续的。例如
List1 包含了 20160101-20180801 的日期,
List2 包含了 20170101-20180801 的日期,
List3 包含了 20170701-20180801 的日期。
如果取交际,即可以获得 20170701-20180801
尝试了好久,实在是没有啥好的方法处理,想问问各位有什么想法吗?在此先谢过了!
14 replies • 2018-08-29 10:40:18 +08:00
 |
|
1
swuzjb Aug 28, 2018 1
转 set 取交集 retainAll
|
 |
|
2
lambdaxs Aug 28, 2018
两两循环,取相等,算法复杂度 n2
|
 |
|
3
johnniang Aug 28, 2018 via Android 1
先排序吧,然后再比较最小值取最小,比较最大值取最小,截取 List,最后转 Set
|
 |
|
4
Bryan0Z Aug 28, 2018 via Android
排序,然后三个指针遍历一次
|
 |
|
5
cyhou Aug 28, 2018
Guava: Sets.intersection(Sets.newHashSet(ListA), Sets.newHashSet(ListB))
|
 |
|
7
fmumu Aug 28, 2018 via Android
循环往 set 里面放,set 的 add 方法是有返回的,当 set 里面已经包含这个元素时,会返回 false
|
 |
|
8
hearfish Aug 29, 2018
本来就有序的话三个指针遍历一次就行
无序的话维护一个 HashMap<Date, Integer>,统计每个日期出现的次数,最后遍历一次只返回出现 n 次的就行
|
 |
|
9
jwk345 Aug 29, 2018 via iPhone
CollectionUtils.intersection
|
 |
|
11
inreality Aug 29, 2018
可以说的更仔细一点吗,是日期段的交集还是日期点的交集
|
 |
|
13
wysnylc Aug 29, 2018
三个集合转 HashMap,循环 A 同时 get B C,循环四次搞定
|
 |
|
14
bumz Aug 29, 2018
你这个业务逻辑看上去不是集合取交集,而是区间取交集
那就更简单了,找到左端点的最大值,右端点的最小值
|