#java #stream #collectors
Вопрос:
У меня есть Map<String, List<MyObject> myMap
. Как я могу объединить все значения списка в одно List<MyObject>
, исключая строковый ключ?
Я попробовал с этим
List<MyObject> list = new ArrayList<MyObject>(myMap.values())
но это не работает с коллекцией.
Также подумывал о том, чтобы просто перебирать карты и присоединять каждый список к новому списку, но надеялся на лучший способ.
Ответ №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
}