首页 > 解决方案 > 如何在 java Stream API 中对对象进行类型转换?

问题描述

如何在嵌套列表的 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>List我为其调用流 API 的主服务器,然后我在List<Controls>.

现在,类中的数据getObject()Controls我试图在这里进行类型转换的 Object 类型。由于 map 函数map(GenericScreenDataBean.class::cast)Controls.class转换 ,我得到了类型转换异常。

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

标签: javajava-8java-stream

解决方案


看来您缺少一个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);

推荐阅读