【问题标题】:Seperate similar elements from two Lists and put remaining in another List从两个列表中分离相似的元素并留在另一个列表中
【发布时间】:2014-04-18 21:14:26
【问题描述】:

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

我能够分离匹配项,但无法创建不匹配项的正确列表。

下面是我写的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 创建源列表。必须浏览每条记录以分隔内容。

【问题讨论】:

    标签: java arrays list arraylist


    【解决方案1】:

    先将整个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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      相关资源
      最近更新 更多