从两个列表中分离出类似的元素,并保留在另一个列表中

时间:2014-04-18 21:14:27

标签: java arrays list arraylist

我有一个很大的字符串列表。我有一个小的字符串列表,实际上是一个大字符串列表的子集。现在我需要将匹配的项目分成源列表和不匹配的项目到目标列表中。

我可以分开匹配的项目,但无法创建正确的非匹配项目列表。

以下是我写的java代码:

public class Demo {
public static void main(String[] args) {

    List<String> smallList = new ArrayList<String>();
    List<String> bigList = new ArrayList<String>();
    List<String> sourceList = new ArrayList<String>();
    List<String> targetList = new ArrayList<String>();

    smallList.add("jammu");
    smallList.add("surat");
    smallList.add("hyderabad");

    bigList.add("hyderabad");
    bigList.add("mumbai");
    bigList.add("delhi");
    bigList.add("jammu");
    bigList.add("patna");
    bigList.add("kanpur");
    bigList.add("surat");
    bigList.add("bangalore");
    bigList.add("chennai");
    bigList.add("kota");

    for(int i=0; i<smallList.size();i++)
    {
        for(int j=0; j<bigList.size(); j++)
        {
            if(smallList.get(i).equalsIgnoreCase(bigList.get(j)))
            {
                targetList.add(smallList.get(i));
                break;
            }
                            else{
                                    targetList.add(bigList.get(j));
                            }

        }

    }

    System.out.println("========== Source List =============");
    System.out.println(sourceList);

    System.out.println("========== Target List =============");
    System.out.println(targetList);

}

}

结果是:

========== Source List =============
[hyderabad, mumbai, delhi, hyderabad, mumbai, delhi, jammu, patna, kanpur]
========== Target List =============
[jammu, surat, hyderabad]

想要的是:

========== Source List =============
[mumbai, delhi, patna, kanpur, bangalore, chennai, kota]
========== Target List =============
[jammu, surat, hyderabad]

非常感谢任何帮助。

更新:我无法使用removeAll创建源列表。浏览每条记录对于分离内容是强制性的。

1 个答案:

答案 0 :(得分:0)

首先将整个bigList复制到sourceList。然后在匹配项中,将其添加到targetList并从sourceList

中删除
for(int i=0; i<smallList.size();i++)
{
    for(int j=0; j<bigList.size(); j++)
    {
        if(smallList.get(i).equalsIgnoreCase(bigList.get(j)))
        {
            targetList.add(smallList.get(i));
            sourceList.remove(smallList.get(i));
            break;
        }
    }
}