如何使用 Java 8 Lambda 表达式将一种类型的列表转换为其子类型的列表

2022-09-02 09:21:41

我似乎只能找到如何在C#而不是Java中执行此操作。

我有一个,但我知道该列表中的每个元素实际上都是 Called .List<TypeX>TypeXTypeY

如何编写接受并返回的 Lambda 表达式?List<TypeX>List<TypeY>


答案 1

对于我的示例,我将使用以下类:

class TypeX {}
class TypeY extends TypeX {}

然后我有一个:List<TypeX>

final List<TypeX> xList = ...

您需要做的就是使用 a 方法引用 :TypeY.class.cast

final List<TypeY> yList = xList.stream()
                               .map(TypeY.class::cast)
                               .collect(toList());

您还可以排除会导致错误的项目:filter()

final List<TypeY> yList = xList.stream()
                               .filter(TypeY.class::isInstance)
                               .map(TypeY.class::cast)
                               .collect(toList());

使用示例:

import static java.util.stream.Collectors.toList;

答案 2

Java 中的投影是使用 map 方法完成的:

List<TypeY> res = listTypeX
    .stream()
    .map((x) -> (TypeY)x)
    .collect(Collectors.toList());

推荐