我有两个ArrayLists如图所示 - pinklist和normallist.我正在比较它们并从两者中找到唯一和重复的值,如下面的代码所示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了duplicateValues正确的,但我没有得到独特的价值观.
Jon*_*eet 15
您finalval在条件中忽略了,而是询问一个列表是否包含另一个列表.
你可以这样做:
// Variable names edited for readability
for (String item : pinkList) {
if (normalList.contains(item)) {
duplicateList.add(item);
} else {
uniqueList.add(item);
}
}
Run Code Online (Sandbox Code Playgroud)
我不会真的称这些"独特"或"重复"的项目 - 这些通常是关于一个集合中的项目.这只是测试一个列表中的每个项目是否在另一个列表中.我会说,在这种情况下,它更像是"现有的"和"新的".
请注意,当您以基于集合的方式处理这些时,我建议使用集合实现,HashSet<E>而不是列表.Guava中的Sets类提供了使用集合的有用方法.
Mor*_*hai 15
这应该做:
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);
Run Code Online (Sandbox Code Playgroud)
阐释:
每个人都List可以将另一个列表作为构造函数参数,并复制它的值.
retainAll(list2)将删除所有不存在的条目list2.
removeAll(list2)将删除所有存在的条目list2.
我们不想删除/保留原始列表,因为这将修改它,因此我们在构造函数中复制它们.
| 归档时间: |
|
| 查看次数: |
38267 次 |
| 最近记录: |