我有 2 个字符串对象的数组列表。
List<String> sourceList = new ArrayList<String>();
List<String> destinationList = new ArrayList<String>();
我有一些逻辑,我需要处理源列表并最终得到目标列表。目标列表将有一些附加元素添加到源列表或从源列表中删除。
我的预期输出是 2 ArrayList of string,其中第一个列表应将所有字符串从源中删除,第二个列表应将所有字符串新添加到源中。
有没有更简单的方法来实现这一目标?
将列表转换为 Collection
并使用removeAll
Collection<String> listOne = new ArrayList(Arrays.asList("a","b", "c", "d", "e", "f", "g"));
Collection<String> listTwo = new ArrayList(Arrays.asList("a","b", "d", "e", "f", "gg", "h"));
List<String> sourceList = new ArrayList<String>(listOne);
List<String> destinationList = new ArrayList<String>(listTwo);
sourceList.removeAll( listTwo );
destinationList.removeAll( listOne );
System.out.println( sourceList );
System.out.println( destinationList );
输出:
[c, g]
[gg, h]
[编辑]
其他方式(更清楚)
Collection<String> list = new ArrayList(Arrays.asList("a","b", "c", "d", "e", "f", "g"));
List<String> sourceList = new ArrayList<String>(list);
List<String> destinationList = new ArrayList<String>(list);
list.add("boo");
list.remove("b");
sourceList.removeAll( list );
list.removeAll( destinationList );
System.out.println( sourceList );
System.out.println( list );
输出:
[b]
[boo]
如果您想通过“removeAll”比较自定义对象,请不要忘记实现“equals”和“hashCode”方法。