【问题标题】:Is there a way to return an Object from stream after Filter? Getting ClassCastException有没有办法在过滤后从流中返回一个对象?获取 ClassCastException
【发布时间】:2021-04-23 09:27:04
【问题描述】:
我想通过流从列表中返回一个对象。
return (planlinevaluesEntityList != null ? (PlanlinevaluesEntity) planlinevaluesEntityList.stream()
.filter(p -> p.getMandantKagId()
.equals(Long.valueOf(mkId))) : null);
但我得到一个 ClassCastException:
java.lang.ClassCastException:类 java.util.stream.ReferencePipeline$2 不能转换为类 de.pares.int_plan.entity.PlanlinevaluesEntity...
我也尝试使用“findFirst()”..
谁能告诉我我做错了什么?
【问题讨论】:
标签:
java
java-stream
classcastexception
【解决方案1】:
任何Stream 操作都需要Terminal 操作才能返回Stream 以外的任何内容。在您的情况下,您有多种选择:findAny() 或 findFirst()。两者都返回一个Optional<T>,您可以使用orElse(null) 解包。
如果您需要显式转换,就像在您的问题中一样,您可以使用filter 和map,如下所示
if (planlinevaluesEntityList == null) {
return null;
}
return planlinevaluesEntityList.stream()
.filter(p -> p.getMandantKagId()
.equals(Long.valueOf(mkId))
)
.filter(PlanlinevaluesEntity.class::isInstance)
.map(PlanlinevaluesEntity.class::cast)
.findFirst()
.orElse(null);
【解决方案2】:
return (planlinevaluesEntityList != null ? planlinevaluesEntityList.stream()
.filter(p -> p.getMandantKagId()
.equals(Long.valueOf(mkId))).findFirst() : null);