我似乎只能找到如何用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;