【问题标题】:How to typecast an object in the java Stream API?如何在 java Stream API 中对对象进行类型转换?
【发布时间】:2019-11-28 07:51:36
【问题描述】:

如何在嵌套列表的 Object - 中对对象进行类型转换:

C c = GenericScreenDataBean fieldObjx = this.expenseLineItemList.stream()
                .flatMap(a -> a.getSectionModel().getControls().stream())
                .filter(b -> b.getData() instanceof GenericScreenDataBean)
                .map(GenericScreenDataBean.class::cast)
                .filter(c->c.getFieldKey().equals("IncurredAmount")).findAny().orElse(null);

正如上面提到的代码,以下是描述-:

List<expenseLineItemList> 是我为其调用流 API 的主 List,然后我在 List<Controls> 上进行流式传输。

现在,Controls 类中的数据 getObject() 是我要在此处进行类型转换的 Object 类型。由于映射函数map(GenericScreenDataBean.class::cast) 将转换Controls.class,我得到了类型转换异常。

那么,我怎样才能对getControls().getObject() 进行类型转换并过滤掉所需的结果,而不是对Controls.class 进行类型转换?

【问题讨论】:

  • 我假设您的意思是 getData() 而不是 getObject(),因为在过滤步骤中使用的是 getData()

标签: java java-8 java-stream


【解决方案1】:

您似乎缺少map 步骤:

C c = GenericScreenDataBean fieldObjx = this.expenseLineItemList.stream()
                .flatMap(a -> a.getSectionModel().getControls().stream())
                .filter(b -> b.getData() instanceof GenericScreenDataBean)
                .map(Controls::getData)
                .map(GenericScreenDataBean.class::cast)
                .filter(c->c.getFieldKey().equals("IncurredAmount")).findAny().orElse(null);

或者,如果您想要一个 map,您可以使用 lambda 表达式而不是方法引用:

C c = GenericScreenDataBean fieldObjx = this.expenseLineItemList.stream()
                .flatMap(a -> a.getSectionModel().getControls().stream())
                .filter(b -> b.getData() instanceof GenericScreenDataBean)
                .map(c -> (GenericScreenDataBean) c.getData())
                .filter(c->c.getFieldKey().equals("IncurredAmount")).findAny().orElse(null);

【讨论】:

  • 或者.map(Controls::getData) .filter(GenericScreenDataBean.class::isInstance) .map(GenericScreenDataBean.class::cast),或者作为一个通用模式,如果你要map得到一个表达式的结果,首先这样做,而不是重复地评估同一个表达式......跨度>
猜你喜欢
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多