我似乎只能找到如何用C#而不是Java来做到这一点。

我有一个List<TypeX>,但是我知道该列表中的每个元素实际上都是TypeX的子类,称为TypeY

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

最佳答案

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

class TypeX {}
class TypeY extends TypeX {}

然后我有一个List<TypeX>:
final List<TypeX> xList = ...

您需要做的只是使用对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;

10-06 05:14