有没有一种方法可以在过滤之后从流中返回一个对象?获取classcastexception

svgewumm  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(329)

我想通过流从列表中返回一个对象。

return (planlinevaluesEntityList != null ? (PlanlinevaluesEntity) planlinevaluesEntityList.stream()
            .filter(p -> p.getMandantKagId()
                    .equals(Long.valueOf(mkId))) : null);

但我有个例外:
java.lang.classcastexception:类java.util.stream.referencepipeline$2不能转换为类de.pares.int\u plan.entity.planlinevaluesentity。。。
我还尝试使用“findfirst()”。。
有人能告诉我我做错了什么吗?

nle07wnf

nle07wnf1#

任何 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);
iklwldmw

iklwldmw2#

return (planlinevaluesEntityList != null ? planlinevaluesEntityList.stream()
                .filter(p -> p.getMandantKagId()
                        .equals(Long.valueOf(mkId))).findFirst() : null);

相关问题