如何使用 Java 8 Lambda 表达式将一种类型的列表转换为其子类型的列表
我似乎只能找到如何在C#而不是Java中执行此操作。
我有一个,但我知道该列表中的每个元素实际上都是 Called .List<TypeX>
TypeX
TypeY
如何编写接受并返回的 Lambda 表达式?List<TypeX>
List<TypeY>
我似乎只能找到如何在C#而不是Java中执行此操作。
我有一个,但我知道该列表中的每个元素实际上都是 Called .List<TypeX>
TypeX
TypeY
如何编写接受并返回的 Lambda 表达式?List<TypeX>
List<TypeY>
对于我的示例,我将使用以下类:
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;
Java 中的投影是使用 map
方法完成的:
List<TypeY> res = listTypeX
.stream()
.map((x) -> (TypeY)x)
.collect(Collectors.toList());