Как объединить вложенный список в простой список с помощью Java 8 Stream API

2

У меня есть List который выглядит следующим образом:

List<List<Class2>> list = new ArrayList<>();

List<Class2> l1 = new ArrayList<>();
l1.add(new Class2(new Class3()));
l1.add(new Class2(new Class3()));
l1.add(new Class2(new Class3()));
list.add(l1);

List<Class2> l2 = new ArrayList<>();
l2.add(new Class2(new Class3()));
l2.add(new Class2(new Class3()));
l2.add(new Class2(new Class3()));
list.add(l2);

Как преобразовать list List в List<Class3> с помощью Java 8 Stream API?

  • 0
    Где твои попытки?
  • 0
    Никаких попыток пока нет, кроме метода грубой силы, когда я перебирал список и самостоятельно извлекал объект Class3
Теги:
java-8
java-stream

1 ответ

2
Лучший ответ

Так как вы передаете в Class2 конструктор экземпляра Class3, я предполагаю, что Class2 имеет Class3 элемент с геттер (назовём геттерного getClass3()).

Исходя из этого, вы можете сделать следующее, чтобы получить List<Class3> всех Class3 членов всех Class2 членов всех списков, содержащихся в list:

List<Class3> listOf3 = 
    list.stream()
        .flatMap(List::stream) // convert a Stream<List<Class2>> to Stream<Class2>
        .map(Class2::getClass3) // convert a Stream<Class2> to Stream<Class3>
        .collect(Collectors.toList()); // collect to a List<Class3>
  • 0
    Ах, да, все верно, я отредактировал это в вопросе. Спасибо за ваш быстрый ответ, это то, что я искал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню