字符串列表的比较器

Dou*_*eux 0 java string list

我是Java的新手:)

我有2个字符串列表,我想知道什么是最有效的方法来比较两个,并有一个结果数组,其中包含不在另一个中的字符串.例如,我有一个名为oldStrings的列表和一个名为Strings的列表.我已经看过Comparator函数但是没有完全理解它是如何工作的,现在我以为我可以创建一个for循环,循环遍历每个字符串然后保存该字符串:

for (final String str : oldStrings) {
  if(!strings.contains(str))
  {                     
    getLogger().info(str + " is not in strings list ");
  }
}
Run Code Online (Sandbox Code Playgroud)

此列表中最多可包含200个字符串.这是最好的解决方法吗?谢谢!

Jig*_*shi 8

Collection firstList = new ArrayList() {{
    add("str1");
    add("str2");
}};

Collection secondList = new ArrayList() {{
    add("str1");
    add("str3");
    add("str4");
}};


System.out.println("First List: " + firstList);
System.out.println("Second List: " + secondList);

// Here is main part
secondList.removeAll(firstList);

System.out.println("Result: " + secondList);  
Run Code Online (Sandbox Code Playgroud)

更新: 更复杂的代码版本

Collection<String> firstList = new ArrayList<String>();
firstList.add("str1");
firstList.add("str2");

Collection<String> secondList = new ArrayList<String>();
secondList.add("str1");
secondList.add("str2");
secondList.add("str3");


System.out.println("First List: " + firstList);
System.out.println("Second List: " + secondList);

// Here is main part
secondList.removeAll(firstList);  
Run Code Online (Sandbox Code Playgroud)

更新:

要获得两个字符串列表之间的实际差异,请执行此操作.

    Set<String> setOne = new HashSet<String>();        
    Set<String> setTwo = new HashSet<String>();
    setOne.add("1");
    setOne.add("2");
    setOne.add("5");
    setTwo.add("1");
    setTwo.add("3");
    setTwo.add("4");
    Set<String> setTwoDummy = new HashSet<String>(setTwo);
    setTwo.retainAll(setOne);        
    setTwoDummy.addAll(setOne);
    setTwoDummy.removeAll(setTwo);
    System.out.println(""+setTwoDummy);
Run Code Online (Sandbox Code Playgroud)