有没有办法 return 过滤后流中的对象?获取 ClassCastException

Is there a way to return an Object from stream after Filter? Getting ClassCastException

我想通过流return列表中的对象。

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

但是我得到一个 ClassCastException:

java.lang.ClassCastException: class java.util.stream.ReferencePipeline cannot be cast to class de.pares.int_plan.entity.PlanlinevaluesEntity...

我也试过使用“findFirst()”..

谁能告诉我我做错了什么?

任何 Stream 操作都需要 Terminal 操作才能 return 除 Stream 之外的任何其他操作。对于您的情况,您有多种选择:findAny()findFirst()。 return 和 Optional<T> 都可以使用 orElse(null).

展开

如果您需要显式转换,就像您的问题一样,您可以使用 filtermap,如下所示

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);
return (planlinevaluesEntityList != null ? planlinevaluesEntityList.stream()
                .filter(p -> p.getMandantKagId()
                        .equals(Long.valueOf(mkId))).findFirst() : null);