【问题标题】:ArrayList contains one or more entities from another ArrayList [duplicate]ArrayList 包含来自另一个 ArrayList 的一个或多个实体 [重复]
【发布时间】:2018-08-26 00:56:46
【问题描述】:

我有两个 ArrayList(list1 和 list2)。我想看看 list2 中的任何 1 个(或多个)对象(它们是字符串)是否出现在 list1 中。

所以,举几个例子:

List<String> list1 = Arrays.asList("ABCD", "EFGH", "IJKL", "QWER");
List<String> list2 = Arrays.asList("ABCD", "1234");
//Should result in true, because "ABCD" is in list 1 & 2

但是,containAll()方法在这个用例中不起作用,因为1234不会出现在list1中,会导致结果为false,同样contains()也不起作用。

除了编写我自己的实现(分别比较从list2到list1的所有值)之外,是否有与contains()类似的方法,可以传入字符串列表,并将其与另一个列表进行比较,然后返回如果该列表中包含一个或多个值,则为 true?

更多示例:

ArrayList list1 = {1, 2, 3, 4, 5}

ArrayList list2 = {1, 2, 3} --> True
ArrayList list2 = {3, 2, 1} --> True
ArrayList list2 = {5, 6, 7, 8, 9} --> True
ArrayList list2 = {6, 7, 8, 9} --> False

【问题讨论】:

  • 你在使用 java-8+ 吗?
  • @KevinDiTraglia 是的

标签: java arrays java-8


【解决方案1】:

就像 java 8 中的list2.stream().anyMatch(list1::contains)

【讨论】:

    【解决方案2】:

    在 Java 8 之前,您可以使用 retainAll 非常简单地实现这一点:

    Set<Foo> intersect = new HashSet<>(listOne);
    intersect.retainAll(listTwo);
    return !intersect.isEmpty();
    

    【讨论】:

      【解决方案3】:

      此任务无需使用流。请改用Collections.disjoint 方法:

      boolean result = !Collections.disjoint(list1, list2);
      

      根据文档:

      如果两个指定的集合没有共同的元素,则返回true

      【讨论】:

      • 这是正确答案。
      • @shmosel 还有其他的错吗?
      • @NiVeR 并不是说​​它们不起作用。
      • @shmosel 所以你应该澄清你的陈述
      【解决方案4】:
      list2.removeAll(list1);
      

      如果你只需要返回布尔值。使用 removeAll(),它的长度 list2 缩小,任何共同的项目都将被删除。

      【讨论】:

        猜你喜欢
        • 2013-01-08
        • 1970-01-01
        • 2019-06-20
        • 2021-01-20
        • 2018-08-19
        • 1970-01-01
        • 2012-08-11
        • 2021-01-03
        • 2018-03-26
        相关资源
        最近更新 更多