Соедините карту строк, список в один список, исключая строку

#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
}