从ArrayLists的ArrayList中删除重复项

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)

任何帮助表示赞赏.谢谢

sie*_*egi 5

这是使用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都不能保证这一点,因为大多数解决方案都没有排序


Prz*_*kal 0

如果您的目标是 < 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]