Java streams: сбор вложенной коллекции
Я учусь использовать потоки Java и нуждаюсь в некоторой помощи в понимании того, как передавать вложенные коллекции и собирать результаты обратно в коллекцию.
в простом примере ниже я создал 2 ArrayLists и добавил их в ArrayList. Я хочу иметь возможность выполнять простую функцию для каждой вложенной коллекции, а затем записывать результаты в новую коллекцию. Последняя строка кода даже не компилируется. Любые объяснения будут оценены!
    ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.asList(1,2,3));
    ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(4,5,6));
    ArrayList<ArrayList<Integer>> nested = new ArrayList<ArrayList<Integer>>();
    nested.add(list1);
    nested.add(list2);
    ArrayList<ArrayList<Integer>> result = nested.stream()
            .map(list -> list.add(100))
            .collect(Collectors.toList());
2 ответов
проблема в том, что List#add не возвращает List. Вместо этого вам нужно вернуть список после сопоставления:
List<ArrayList<Integer>> result = nested.stream()
        .map(list -> {
            list.add(100);
            return list;
        })
        .collect(Collectors.toList());
или вы можете пропустить, используя map и сделать это с помощью forEach С ArrayList изменчиво:
nested.forEach(list -> list.add(100));
можно использовать Stream.of() чтобы сделать это, не создавая вложенную структуру заранее.
        List<ArrayList<Integer>> nestedList = Stream.of(list1, list2)
            .map(list -> {list.add(100); return list;})
            .collect(Collectors.toList());
и, возможно, извлечь операцию карты в отдельную функцию.
