hri*_*isc 6 java arraylist duplicates
我有一个问题,我相信解决方案是如此简单,但我无法找到它.我有一个ArrayList较小的ArrayLists.这些列表包含类型的元素String.我想将较小的列表合并为一个,然后删除重复项.让我说清楚.
我有这个:
[[USA, Maine], [USA, Maine, Kennebunk], [USA, Maine, North Berwick],
[USA, New Hampshire], [USA, Keene, New Hampshire], [USA, Keene, New
Hampshire, Main Street], [USA, New Hampshire, Swanzey]].
Run Code Online (Sandbox Code Playgroud)
这是我的主要列表,其中包含较小的列表.我希望有一个最终的ArrayList,它是较小的合并,并删除重复项.
我想要的是:
[USA, Maine, Kennebunk, North Berwick, New Hampshire , Keene, Main Street, Swanzey]
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.谢谢
这是使用Stream该类的简洁解决方案:
listOfLists.stream().flatMap(List::stream).collect(Collectors.toSet())
Run Code Online (Sandbox Code Playgroud)
请注意,结果是类型Set.这样可以删除重复项.
如果您需要List,可以使用:
listOfLists.stream()
.flatMap(List::stream)
.distinct()
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
请注意,这甚至可以保证元素的顺序稳定,即[["foo","bar"],["bar","abc","foo"]]始终["foo","bar","abc"]按此顺序生成.大多数解决方案Set都不能保证这一点,因为大多数解决方案都没有排序
如果您的目标是 < Java 8,您可以创建 Final 的实例ArrayList,我们将其称为“resultList”。然后迭代每个内部ArrayLists并仅添加Strings方法contains()返回 false 的这些。仅当您必须用作ArrayList最终收藏时,这才是解决方案。否则,您应该考虑使用HashSet,它会自动在内部保存唯一值并删除任何重复的对象。ArrayList如果您需要用作结果集合,以下代码可能会对您有所帮助:
ArrayList<ArrayList<String>> sourceList = new ArrayList<>();
// Adding sample ArrayLists ("a" and "b") of Strings to sourceList:
ArrayList<String> a = new ArrayList<>();
a.add("USA");
a.add("Maine");
sourceList.add(a);
ArrayList<String> b = new ArrayList<>();
b.add("USA");
b.add("Maine");
b.add("Kennebunk");
sourceList.add(b);
ArrayList<String> resultList = new ArrayList<>();
for(ArrayList<String> outerList : sourceList) {
for(String str : outerList) {
// If resultList doesn't contain currently checked string...
if(!(resultList.contains(str))) {
// Add this string to resultList...
resultList.add(str);
}
}
}
System.out.println(resultList.toString());
Run Code Online (Sandbox Code Playgroud)
您得到的输出:[USA, Maine, Kennebunk]