java - 比较两个 ArrayList 以获得唯一值和重复值

标签 java

我有两个 ArrayLists,如图所示 - pinklistnormallist。我正在比较它们并从中找到唯一值和重复值,如下面的代码所示:

List<String> pinklist = t2.getList();
List<String> normallist = t.getList();
ArrayList<String> duplicatevalues = new ArrayList<String>();
ArrayList<String> uniquevalues = new ArrayList<String>();

for (String finalval : pinklist) {
    if (pinklist.contains(normallist)) {
        duplicatevalues.add(finalval);
    } else if (!normallist.contains(pinklist)) {
        uniquevalues.add(finalval);
    }
}

我正在正确获取 duplicateValues,但没有获取唯一值。

最佳答案

应该这样做:

List<String> pinklist = t2.getList();
List<String> normallist = t.getList();

ArrayList<String> duplicates = new ArrayList<String>(normallist);
duplicates.retainAll(pinklist);

ArrayList<String> uniques = new ArrayList<String>(normallist);
uniques.removeAll(pinklist);  

解释:

  • 每个 List 都可以将另一个列表作为构造函数参数,并复制它的值。

  • retainAll(list2) 将删除所有在 list2 中不存在的条目。

  • removeAll(list2) 将删除所有确实存在于 list2 中的条目。

  • 我们不想删除/保留原始列表,因为这会修改它,所以我们在构造函数中复制它们。

关于java - 比较两个 ArrayList 以获得唯一值和重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13718548/

相关文章:

java - Spring集成DSL TCP : How to prevent excessive logging of Connection refused on the client side

java - 字符串方法 -​​ 数组还是不数组?

java - DataSource 如何成为对 ConnectionPoolDataSource 的引用。

java - 为什么 notifyAll() 在 Integer 上同步时会引发 IllegalMonitorStateException?

java - Wicket 组件层次结构 - getParent()

java - 如何在java应用程序中使用密码保护sqlite db

java - 无法使用 Apache POI 打开 Excel

java - OpenGL Java VBO

java - 与另一个一起启动一个主类

java - toString() 是否定义为为 java.lang.String 返回 this?