【问题标题】: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) 解包。

    如果您需要显式转换,就像在您的问题中一样,您可以使用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);
    

    【讨论】:

      【解决方案2】:
      return (planlinevaluesEntityList != null ? planlinevaluesEntityList.stream()
                      .filter(p -> p.getMandantKagId()
                              .equals(Long.valueOf(mkId))).findFirst() : null);
      

      【讨论】:

      • 请解释一下代码的作用和它是怎么做的。
      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 2014-05-30
      • 2021-09-15
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多