如何在Java Stream API中类型转换对象?

Ris*_*sal 7 java java-8 java-stream

我如何在嵌套列表的对象-中键入对象:

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);
Run Code Online (Sandbox Code Playgroud)

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

List<expenseLineItemList>List我要为其调用流API的主服务器,然后在上进行流传输List<Controls>

现在,数据getObject()Controls类对象的,我想在这里强制转换的类型。由于map函数map(GenericScreenDataBean.class::cast)Controls.class转换,因此我收到了typecasting异常。

因此,除了强制转换之外Controls.class,我该如何强制转换getControls().getObject()并过滤出所需的结果?

Era*_*ran 4

看来您缺少一个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);
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要单个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);
Run Code Online (Sandbox Code Playgroud)