当前位置: 首页 > 知识库问答 >
问题:

找出另一个arraylist中不存在的arraylist元素

邓越泽
2023-03-14

我必须找到一个最好的方法来找出第二个arraylist中没有出现的元素。认为

Arraylist a,b, 

Arraylist a={1,2,3,4,5};
Arraylist b={2,3,4};

所以基本上我想要的是找出a的元素,它不存在于arraylist b中。

那么,最好的解决方案是什么?

共有3个答案

司马高韵
2023-03-14

下面是使用Java8的另一种方法-

a.stream().filter(b::contains).collect(Collectors.toList());
戎兴言
2023-03-14

您可以使用Apache Commons Collections,它有一个明确用于此目的的方法:

public static void main(String[] args) {
    List<Integer> a = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 });
    List<Integer> b = Arrays.asList(new Integer[] { 2, 3, 4 });
    Collection<Integer> aMinusB = CollectionUtils.subtract(a, b);
    System.out.println(aMinusB);
}

打印结果为:[1,5]。

Apache Commons LIB经过了良好的测试,通常用于扩展标准Java功能。这个特殊的方法接受Iterable作为参数,所以你可以使用任何你想要的集合。您还可以混合使用不同的收藏类型:

public static void main(String[] args) {
    List<Integer> a = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 });
    Set<Integer> b = new HashSet<Integer>(Arrays.asList(new Integer[] { 2, 3, 4 }));
    Collection<Integer> aMinusB = CollectionUtils.subtract(a, b);
    System.out.println(aMinusB);
}

打印结果相同[1,5]。

在这里查看Javadoc。

为了完整起见,谷歌的Guava库没有以下功能:

集合*减去*(集合,集合)
没有等价物--创建一个包含a的ArrayList,然后为b中的每个元素调用删除。

然而,它实现了一个名为set的方法。difference()方法,如果您喜欢番石榴,可以使用该方法:

public static void main(String[] args) {
    Set<Integer> a = new HashSet<Integer>(Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 }));
    Set<Integer> b = new HashSet<Integer>(Arrays.asList(new Integer[] { 2, 3, 4 }));
    Set<Integer> aMinusB = Sets.difference(a, b);
    System.out.println(aMinusB);
}

结果是a中的所有元素在b中不存在(即[1,5])。当然,顺序是不确定的,因为它是在集合上运行的。

朱伯寅
2023-03-14
List<Integer> c = new ArrayList<>(a);
c.removeAll(b);

还考虑使用集合而不是列表。

 类似资料:
  • 例1 我想检查a中的所有内容是否都存在于b中 从例子1中,上面的应该打印出false,后跟猕猴桃,因为b中没有猕猴桃。至于b中的额外水果,没有关系,因为我只想检查a的存在 上面打印的是false,所以我的问题是: 如果为false,如何打印不匹配的值,例如应该说false,然后是kiwi 有没有更好的方法来打印真假而不是containsAll方法

  • 我需要检查一个arraylist中的任何值是否存在于另一个arraylist中: 它打印“它不包含”。我需要知道是否有方法比较这两个arraylist,如果其他arraylist中存在任何值,它应该返回。我知道迭代可以有所帮助。有什么简单的方法可以做到这一点吗?

  • 问题内容: 我有两个arraylist 我想检查a2中是否存在a1的所有元素。这是我正在尝试的问题 这没有给出一致的结果…还有其他方法可以做到吗? 问题答案: 不知道我是否正确理解了您的问题,为什么使用? 试过这个: 它输出 添加一个额外的元素将使它失败(如预期): 它输出

  • 问题内容: 我有两个arrayLists,我试图从另一个中“减去”一个arrayList。例如,如果我有一个arrayList [1,2,3],而我试图减去[0,2,4],则结果arrayList应该为[1,3]。 这是我的代码。 我的代码在某些情况下可以正常工作,例如if ,它将给我的结果。但是,如果我尝试像和 我得到这个异常: 这是我想出的代码。我已经通过它进行了测试,对我来说我认为它应该起作

  • 我有一个名为TwoNumbers的类,它创建一个包含两个数字的对象。我创建了一个包含此对象的ArrayList<>,并希望将这些对象复制到新的ArrayList中。 问题是我只想将不同的对象复制到新的ArrayList中。当对象内部的数字可能相同时,Java将每个对象视为不同的对象,我不知道如何阻止它复制每个对象。 我的TwoNumber类:公共TwoNumbers(int n1,int n2)

  • 问题内容: 我有以下Java代码,其中我试图将ArrayList复制到另一个ArrayList。 我希望“列表”数组采用以下格式: 但是从上面的代码中,“ list”数组输出看起来像这样: 我想您可能已经注意到了差异。我无法达到预期格式的结果。请建议我任何解决方案!提前致谢!! 问题答案: 然后,你需要的: 请注意,已更改为。在Java命名约定中,变量以小写字母开头。类以大写字母开头。