使用Stream 8使用Java 8将类型嵌套列表转换为另一种类型

时间:2019-06-08 15:35:19

标签: java-8 java-stream nested-lists

我有一个嵌套列表

TypeOne具有方法TypeTwo getTypeTwo() { return typeTwo;}

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

我想获得List<List<typeTwo>>

如何翻译?

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

但是,我不知道该怎么做。

将嵌套列表类型转换为另一种类型的有效方式是什么?

2 个答案:

答案 0 :(得分:1)

您需要的关键概念是Collectors

首先,对于更易于理解的代码,我将创建一个辅助方法来进行内部转换:

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());

答案 1 :(得分:1)

尝试...

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