【问题标题】:How to fix remove duplicate from lists with lambda and condition如何使用 lambda 和条件修复从列表中删除重复项
【发布时间】:2019-08-21 08:49:29
【问题描述】:

我想知道为什么返回的列表包含“1”

List<Integer> a= Arrays.asList(1,2,3,4,5);
List<Integer> b=Arrays.asList(1,7,8,9,10);

a.stream().filter(first -> (b.stream().anyMatch(second -> first.compareTo(second)!=0)))
          .forEach(System.out::println);

【问题讨论】:

    标签: java lambda java-8 duplicates java-stream


    【解决方案1】:

    我想你正在寻找:

    a.stream().filter(first -> !b.contains(first)).forEach(System.out::println);
    

    这里,结果流将只包含列表b中不存在的值。

    【讨论】:

    • @mehranarbabian 还可以考虑将Set 用于b 以提高性能。
    • @Glains 如果集合的大小为 5,则不会产生任何有意义的差异。
    • @JoeC 确实如此,但提及未来可能相关的重要事情总是好的。谢谢你的重点!
    【解决方案2】:

    您最初的解决方案是在集合a 中查找与集合b 中的至少一个数字不同的数字。

    在1的情况下,它与7不同,因此是匹配的。

    在这种情况下,您可能正在寻找noneMatch

    a.stream().filter(first -> (b.stream().noneMatch(first::equals)))
          .forEach(System.out::println);
    

    (当然,在这种情况下使用contains 更容易。)

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2019-02-19
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多