преобразовать тип Nested List в другой тип, используя Java 8, используя Stream - PullRequest
1 голос
/ 08 июня 2019

У меня есть вложенный список

TypeOne имеет метод TypeTwo getTypeTwo() { return typeTwo;}

List<List<TypeOne>> nestedListsTypeOne = someMethodPopulate();

Я хочу получить List<List<typeTwo>>

Как перевести его?

nestedListsTypeOne.stream()
.foreach(listTypeOne -> map(TypeOne -> TypeOne::getTypeTwo))
.HereIHavingProblem

Но я не знаю, как это сделать.

Как эффективно конвертировать вложенный тип списка в другой тип?

Ответы [ 2 ]

1 голос
/ 08 июня 2019

попробуй с ...

public static List<List<TypeTwo>> translateType(List<List<TypeOne>> nestedListTypeOne) {
    List<List<TypeTwo>> nestedListTypeTwo = nestedListTypeOne
        .stream()
        .map(listTypeOne -> {
          return listTypeOne.stream()
              .map(typeOne -> typeOne.getTypeTwo())
              .collect(Collectors.toList());
        })
        .collect(Collectors.toList());
    return nestedListTypeTwo;
  }
1 голос
/ 08 июня 2019

Ключевая концепция, которая вам нужна: Коллекторы .

Сначала для более понятного кода я бы сделал вспомогательный метод для внутреннего преобразования:

public class TypeOne {

    public static List<TypeTwo> convert(List<TypeOne> list) {
        return list.stream()
            .map(TypeOne::getTypeTwo)
            .collect(Collectors.toList());
}

Затем вы применяете его к внешнему списку:

List<List<Type2>> result = nestedListsTypeOne
    .stream()
    .map(Type1::convert)
    .collect(Collectors.toList());
...