【发布时间】:2016-08-30 10:35:52
【问题描述】:
假设我有这 3 个课程(大大减少):
public interface Base
{
String getType();
}
public class Object1 implements Base
{
String getType() { ... };
long getSerialNr() { ... };
}
public class Object2 implements Base
{
String getType() { ... };
long getPartNr() { ... };
}
我将如何(使用 Java 8 流)使用条件强制转换将 List<Base> 转换为 List<Long>?我从这个开始:
List<Long> result = baseList.stream().filter(Objects::nonNull)
.filter(Object1.class::isInstance)
.map(Object1.class::cast)
.map(o -> o.getSerialNr())
.collect(Collectors.toList());
...但是如何整合第二种情况,其中元素是Object2 的实例,我想返回getPartNr?
【问题讨论】:
-
为什么不在
Base接口中简单地声明long getId()? -
很遗憾,这是不可能的。这只是我的“现实世界问题”的一个过于简单的例子,在界面中没有 getId() 是有意义的。
标签: lambda java-8 type-conversion java-stream predicate