我是java的新手.
我有2个字符串数组列表
List<String> a= [2,14]
List<String> b= [2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
我想要两个新的ArrayLists
1)列表具有b但不在的值a
List<String> c= [3,4,5]
Run Code Online (Sandbox Code Playgroud)
2)列表有值a但不在b
List<String> d=[14]
Run Code Online (Sandbox Code Playgroud)
我试过了:
List<String> c = new ArrayList<String>(b);
c.removeAll(a);
System.out.println("c::::::::::::::::::::::::::::::"+c); // 2,3,4,5
Run Code Online (Sandbox Code Playgroud)
这不是删除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);
Run Code Online (Sandbox Code Playgroud)
你真的提出的是集合操作而不是列表操作 - 在这种情况下,你最好使用a而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);
Run Code Online (Sandbox Code Playgroud)
(这将为工作ArrayList,以及HashSet-我只是改为使用套,因为它是当你想基于集合的操作更合适的类型.)
或者更好,使用番石榴的Sets.difference方法:
Set<String> a = ...;
Set<String> b = ...;
Set<String> c = Sets.difference(b, a);
Set<String> d = Sets.difference(a, b);
Run Code Online (Sandbox Code Playgroud)
这将创建有关差异的视图 - 因此对原始集的更改将反映在视图中.您可以通过创建新的视图来有效地拍摄视图的快照HashSet:
Set<String> snapshot = new HashSet<String>(c);
Run Code Online (Sandbox Code Playgroud)