将 String、List 的 Map 连接成一个不包括 String 的 List
Join a Map of String, List into a single List excluding the String
我有一个Map<String, List<MyObject> myMap
。如何将所有列表值合并为一个 List<MyObject>
,不包括字符串键?
我试过这个
List<MyObject> list = new ArrayList<MyObject>(myMap.values())
但这不适用于集合。
还考虑过迭代地图并将每个列表加入一个新列表,但希望有更好的方法。
这是一种可能的流方式
map.values().stream().flatMap(Collection::stream).collect(Collectors.toList())
我有一个样本,可能对你有帮助:
public class App {
public static void main(String[] args) {
test();
}
private static void test() {
Map<String, List<Test>> map = new HashMap<>();
List<Test> test = new ArrayList<>();
test.add(new Test(1, "AAA"));
test.add(new Test(2, "BBB"));
map.put("A", test);
test = new ArrayList<>();
test.add(new Test(3, "CCC"));
test.add(new Test(4, "DDD"));
map.put("B", test);
System.out.println(map);
List<Test> testList = new ArrayList<>();
map.values().stream().forEach(tests -> tests.forEach(testData -> testList.add(testData)));
System.out.println(testList);
}
}
class Test {
private int id;
private String name;
//getter setters
}
我有一个Map<String, List<MyObject> myMap
。如何将所有列表值合并为一个 List<MyObject>
,不包括字符串键?
我试过这个
List<MyObject> list = new ArrayList<MyObject>(myMap.values())
但这不适用于集合。
还考虑过迭代地图并将每个列表加入一个新列表,但希望有更好的方法。
这是一种可能的流方式
map.values().stream().flatMap(Collection::stream).collect(Collectors.toList())
我有一个样本,可能对你有帮助:
public class App {
public static void main(String[] args) {
test();
}
private static void test() {
Map<String, List<Test>> map = new HashMap<>();
List<Test> test = new ArrayList<>();
test.add(new Test(1, "AAA"));
test.add(new Test(2, "BBB"));
map.put("A", test);
test = new ArrayList<>();
test.add(new Test(3, "CCC"));
test.add(new Test(4, "DDD"));
map.put("B", test);
System.out.println(map);
List<Test> testList = new ArrayList<>();
map.values().stream().forEach(tests -> tests.forEach(testData -> testList.add(testData)));
System.out.println(testList);
}
}
class Test {
private int id;
private String name;
//getter setters
}