如何解决合并两个没有重复的列表
| 我想将一个列表中的项目添加到另一个列表中,而不要重复。我使用了以下涉及一组的方法。这是达到最终结果的最有效方法吗?有没有更整洁的方法来更新lista以包含唯一的setboth对象?Set setboth = new HashSet(lista);
setboth.addAll(listb);
lista.clear();
lista.addAll(setboth);
解决方法
看起来还不错,但这取决于这些项目是否实现equals和hashCode。
HashSet数据结构依赖于equals和hashCode的有效实现。具有toString()实现的实例针对两个实例显示相同的字符串的类将不被视为同一实例,除非两个实例还返回相同的哈希码,并且在equals上返回true。
,或者您可以这样做:
list1.removeAll(list2);
list2.addAll(list1);
但这可能会比使用HashSet慢,具体取决于List实现类。此外,它会更改原始列表之一(在您的上下文中可能是也可能不是一个选项)
,如果最终结果只能是Collection
,则可以直接使用setBoth
,而无需将所有结果复制到lista
中。
,// CollectionUtils.intersection(ownerList,bcList)返回在ownerList和bcList中都包含的集合
CollectionUtils.union将bc的列表合并为唯一列表
私有列表getAuthorisedBCList(List bcList,Set> bcOwnersList){
列表listList = new ArrayList();
for(List<String> ownerList : bcOwnersList){
listList = (List<String>) CollectionUtils.union(listList,CollectionUtils.intersection(ownerList,bcList));
}
return listList;
}
,我知道这个问题已经得到解答,但是我认为还有另一种解决方法,它可能对登陆此页面的人有所帮助。
lista.add(listb);
listb.clear();
listb.add(new ArrayList<String>(new LinkedHashSet<String>(lista)));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。