我是java新手。
我有2个字符串数组列表
List<String> a= [2,14]
List<String> b= [2,3,4,5]
我想要两个新的ArrayLists
1)列表的值为b
但不在a
List<String> c= [3,4,5]
2)列表的值为a
但不在b
List<String> d=[14]
我试过了:
List<String> c = new ArrayList<String>(b);
c.removeAll(a);
System.out.println("c::::::::::::::::::::::::::::::"+c); // 2,3,4,5
没有删除List a
的值完整代码
public static void updatePartyType(List<String> oldPartyKeys, List<String> newPartyKeys, String customerCode) {
System.out.println("oldPartyKeys--->"+oldPartyKeys);// 2,14
System.out.println("newPartyKeys--->"+newPartyKeys); // 2,3,4,5
System.out.println("oldPartyKeys class --->"+oldPartyKeys.getClass());// class java.util.ArrayList
List<String> newlySelectedPartyKeys = new ArrayList<String>(newPartyKeys);
newlySelectedPartyKeys.removeAll(oldPartyKeys);
System.out.println("newlySelectedPartyKeys::::::::::::::::::::::::::::"+newlySelectedPartyKeys);
答案 0 :(得分:6)
您真正提出的设置操作不仅仅是列表操作 - 在这种情况下,您最好使用HashSet
而不是ArrayList
。然后你可以使用Collection<E>.removeAll
:
Set<String> a = ...;
Set<String> b = ...;
Set<String> c = new HashSet<String>(b);
c.removeAll(a);
Set<String> d = new HashSet<String>(a);
d.removeAll(b);
(这适用于ArrayList
以及HashSet
- 我只更改为使用集合,因为当您需要基于集合的操作时,它是更合适的类型。)
或者更好的是,使用Guava的Sets.difference
方法:
Set<String> a = ...;
Set<String> b = ...;
Set<String> c = Sets.difference(b, a);
Set<String> d = Sets.difference(a, b);
这将在差异上创建视图 - 因此对原始集的更改将反映在视图中。您可以通过创建新的HashSet
:
Set<String> snapshot = new HashSet<String>(c);
答案 1 :(得分:3)
可以使用removeAll
方法完成此操作:
List<String> c = new ArrayList<>(b);
c.removeAll(a);
List<String> d = new ArrayList<>(a);
d.removeAll(b);
答案 2 :(得分:2)
将您的列表转换为Set
个实例。然后,您可以通过自己的实现或使用第三方库(例如 Google Guava )轻松找到集合的差异,例如Sets.difference()
。
答案 3 :(得分:2)
查看addAll()
中的removeAll()和ArrayList现在您需要b\a
b.removeAll(a)
和a\b
<{1}}
一个工作示例(这适用于那些刚接触Java的人,所以它很冗长):
a.removeAll(b)
答案 4 :(得分:1)