有没有办法 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)
.
展开
如果您需要显式转换,就像您的问题一样,您可以使用 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);
return (planlinevaluesEntityList != null ? planlinevaluesEntityList.stream()
.filter(p -> p.getMandantKagId()
.equals(Long.valueOf(mkId))).findFirst() : null);
我想通过流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)
.
如果您需要显式转换,就像您的问题一样,您可以使用 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);
return (planlinevaluesEntityList != null ? planlinevaluesEntityList.stream()
.filter(p -> p.getMandantKagId()
.equals(Long.valueOf(mkId))).findFirst() : null);