获取所有给定列表中出现的所有字符串

时间:2018-01-22 15:19:46

标签: java string arraylist java-7

我有一份清单清单:ArrayList<ArrayList<String>> names
我想获得每个列表中出现的所有字符串的列表。有没有更简单,更优雅的方式来做这个而不是使用4个循环:

ArrayList<ArrayList<String>> names = new ArrayList<>();
for (ArrayList<String> n1 : names) {
    for (String name1 : n1) {
        for (ArrayList<String> n2 : names) {
            for (String name2 : n2) {
            }
        }
    }
}

编辑:

我想要一个出现所有列表的字符串列表。因此,如果String只在一个或两个列表中,则它不应该在我的结果列表中。

是的,代码必须与Java 7兼容,所以很遗憾没有流。

2 个答案:

答案 0 :(得分:3)

您可以将多个列表展平为单个字符串列表

Java 7:

List<String> flattenedResult = new ArrayList<>();
for (List<String> currentNameList : names) {
    flattenedResult.addAll(currentNameList);
}

使用Java 8流:

List<String> flattenedResult = names.stream()
        .flatMap(Collection::stream)
        .collect(Collectors.toList());

答案 1 :(得分:3)

您可以在Java 7上获得ArrayList.retainAll的帮助。例如,在ArrayList<ArrayList<String>> names中列出此列表:

list1 = "e1", "e2", "e3", "e4", "e5"
list2 = "e6", "e7", "e3", "e4", "e5"
list3 = "e8", "e9", "e3", "e4", "e5"

您可以使用retainAll获取每个列表中出现的所有字符串(交集):

List<String> commonElements = new ArrayList<>(list1);
for(List<String> tmpList: names){
    commonElements.retainAll(tmpList);
}

输出:

  

[e3,e4,e5]

相关问题