arv*_*unk 47 java arrays collections list arraylist
我必须找到一种最好的方法来找出第二个arraylist中没有出现的元素.假设
Arraylist a,b,
Arraylist a={1,2,3,4,5};
Arraylist b={2,3,4};
Run Code Online (Sandbox Code Playgroud)
所以基本上我要的是找出的元素一个是不存在的ArrayList b.
那么这样做的最佳解决方案是什么?
Puc*_*uce 79
List<Integer> c = new ArrayList<>(a);
c.removeAll(b);
Run Code Online (Sandbox Code Playgroud)
还要考虑使用集而不是列表.
Nik*_*zov 10
你可以尝试removeAll:
List<Integer> notPresent = new ArrayList<Integer>(a);
notPresent.removeAll(b);
Run Code Online (Sandbox Code Playgroud)
您可以使用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);
}
Run Code Online (Sandbox Code Playgroud)
打印结果为:[1,5].
Apache Commons lib经过了很好的测试,常用于扩展标准Java功能.此特定方法接受Iterable作为参数,因此您可以使用任何Collection您想要的.您还可以混合使用不同的集合类型:
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);
}
Run Code Online (Sandbox Code Playgroud)
打印结果相同,[1,5].
在这里查看Javadoc .
Collection *subtract*(Collection, Collection)
没有等价物 - 创建一个包含a的ArrayList,然后为b中的每个元素调用remove.
但是,它实现了一个名为Sets.difference()method的方法,如果您更喜欢Guava并使用集合,则可以使用该方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
结果是所有元素a都不存在b(即[1,5]).当然,由于订单在集合上运行,因此订单不确定.
小智 8
这是使用Java 8的另一种方法-
a.stream().filter(b::contains).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
使用 org.apache.commons.collections4.ListUtils
特定
List<Integer> a = Arrays.asList(new Integer[]{ 1,2,3,4,5});
List<Integer> b = Arrays.asList(new Integer[]{0,1,2,3});
Run Code Online (Sandbox Code Playgroud)
行动
List<Integer> c = ListUtils.removeAll(b, a)
Run Code Online (Sandbox Code Playgroud)
结果列表c
4, 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58025 次 |
| 最近记录: |