ElegantOfKing
V2EX  ›  问与答

Java 多个 List 如何取交集

  •  
  •   ElegantOfKing · Aug 28, 2018 · 7019 views
    This topic created in 2996 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
    swuzjb
    swuzjb
    Aug 28, 2018❤️1
    1
    转 set 取交集 retainAll
    lambdaxs
    lambdaxs
    Aug 28, 2018
    2
    两两循环,取相等,算法复杂度 n2
    johnniang
    johnniang
    Aug 28, 2018 via Android❤️1
    3
    先排序吧,然后再比较最小值取最小,比较最大值取最小,截取 List,最后转 Set
    Bryan0Z
    Bryan0Z
    Aug 28, 2018 via Android
    4
    排序,然后三个指针遍历一次
    cyhou
    cyhou
    Aug 28, 2018
    5
    Guava: Sets.intersection(Sets.newHashSet(ListA), Sets.newHashSet(ListB))
    maninfog
    maninfog
    Aug 28, 2018 via Android❤️1
    6
    @johnniang 最小值应该是取最大吧,然后最大值取最小
    fmumu
    fmumu
    Aug 28, 2018 via Android
    7
    循环往 set 里面放,set 的 add 方法是有返回的,当 set 里面已经包含这个元素时,会返回 false
    hearfish
    hearfish
    Aug 29, 2018
    8
    本来就有序的话三个指针遍历一次就行

    无序的话维护一个 HashMap<Date, Integer>,统计每个日期出现的次数,最后遍历一次只返回出现 n 次的就行
    jwk345
    jwk345
    Aug 29, 2018 via iPhone
    9
    CollectionUtils.intersection
    johnniang
    johnniang
    Aug 29, 2018 via Android
    10
    @maninfog 不好意思,我的锅
    inreality
    inreality
    Aug 29, 2018
    11
    可以说的更仔细一点吗,是日期段的交集还是日期点的交集
    WisdomWang
    WisdomWang
    Aug 29, 2018
    12
    用流?
    wysnylc
    wysnylc
    Aug 29, 2018
    13
    三个集合转 HashMap,循环 A 同时 get B C,循环四次搞定
    bumz
    bumz
    Aug 29, 2018
    14
    你这个业务逻辑看上去不是集合取交集,而是区间取交集

    那就更简单了,找到左端点的最大值,右端点的最小值
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2455 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 10:57 · PVG 18:57 · LAX 02:57 · JFK 05:57
    ♥ Do have faith in what you're doing.