【问题标题】:Join a Map of String, List into a single List excluding the String将字符串映射,列表加入到单个列表中,不包括字符串
【发布时间】:2021-11-16 09:41:54
【问题描述】:
我有一个Map<String, List<MyObject> myMap。如何将所有 List 值加入一个 List<MyObject>,不包括 String 键?
我试过了
List<MyObject> list = new ArrayList<MyObject>(myMap.values())
但这不适用于集合。
还想过只遍历地图并将每个列表加入一个新列表,但希望有更好的方法。
【问题讨论】:
标签:
java
stream
collectors
【解决方案1】:
这是一种可能的流方式
map.values().stream().flatMap(Collection::stream).collect(Collectors.toList())
【解决方案2】:
我有一个样本,它可能对你有帮助:
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
}