Warm tip: This article is reproduced from serverfault.com, please click

java-比较 2 个 ArrayLists 的简单方法

(java - Simple way to compare 2 ArrayLists)

发布于 2013-10-03 09:14:29

我有 2 个字符串对象的数组列表。

List<String> sourceList = new ArrayList<String>();
List<String> destinationList = new ArrayList<String>();

我有一些逻辑,我需要处理源列表并最终得到目标列表。目标列表将有一些附加元素添加到源列表或从源列表中删除。

我的预期输出是 2 ArrayList of string,其中第一个列表应将所有字符串从源中删除,第二个列表应将所有字符串新添加到源中。

有没有更简单的方法来实现这一目标?

Questioner
prabu
Viewed
22
Maxim Shoustin 2013-10-03 17:54:18

将列表转换为 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]