获取所有给定列表中出现的所有字符串
Get all strings that occur in ALL given lists
我有一个列表列表: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) {
}
}
}
}
编辑:
我想要一个出现在所有列表中的字符串列表。所以如果一个字符串只在一个或两个列表中,它不应该在我的结果列表中。
是的,代码必须兼容 Java 7,很遗憾没有流。
您可以将多个列表展平为一个字符串列表
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());
您可以在 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]
我有一个列表列表: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) {
}
}
}
}
编辑:
我想要一个出现在所有列表中的字符串列表。所以如果一个字符串只在一个或两个列表中,它不应该在我的结果列表中。
是的,代码必须兼容 Java 7,很遗憾没有流。
您可以将多个列表展平为一个字符串列表
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());
您可以在 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]