java - Java 8 Stream - 令牌“(”上的语法错误,此令牌后应有表达式
问题描述
我没有使用过任何 Java 8。
这是我在 Java 8 版本下面编写的代码。
List<GetOrderResponseType> orders = findOrderResponseType.getOrder();
List<GetOrderResponseType> openOrders = new ArrayList<GetOrderResponseType>();
if (!CollectionUtils.isEmpty(orders)) {
for(GetOrderResponseType order : orders ) {
if ( order != null) {
if (order.getOrderSummary() != null) {
if ( order.getOrderSummary().getState() != null) {
if (order.getOrderSummary().getState().toString().toLowerCase().startsWith("open")) {
openOrders.add(order);
}
}
}
}
}
}
return openOrders;
Now, I am trying to change to Java 8 using Streams.
openOrders = orders.stream()
.filter(order -> Objects.nonNull(order))
.map(order -> order.getOrderSummary())
.filter(orderSummary -> Objects.nonNull(orderSummary))
.map(orderSummary -> orderSummary.getState())
.filter(orderSummaryState -> Objects.nonNull(orderSummaryState))
.map(orderSummaryState -> orderSummaryState.toString())
.filter(orderSummaryStateStr -> Objects.nonNull(orderSummaryStateStr))
.filter(orderSummaryStateStr -> orderSummaryStateStr.toLowerCase().startsWith("open"))
.collect(Collectors.toList<GetOrderResponseType>());
在最后一条语句中,我在令牌“(”上出现语法错误,此令牌之后的表达式。
谢谢,班迪塔普拉丹
解决方案
该 .map()
函数更改存储在流中的对象的类型。例如,当你这样做时,.map(order -> order.getOrderSummary())
你正在将流从 更改Stream<GetOrderResponseType>
为Stream<OrderSummary>
。因此,在您尝试将流收集回 a 的最后一步时List<GetOrderResponseType>
,您不能因为您有 a Stream<String>
,这是字符串顺序摘要状态,而不是Stream<GetOrderResponseType>
.
您尝试完成的工作可能最好使用单个过滤器完成,并传入一个进行过滤的方法引用,如下所示:
List<GetOrderResponseType> openOrders = orders.stream()
.filter(this::isOpenOrder)
.collect(Collectors.toList());
然后像这样定义一个isOpenOrder
方法:
private boolean isOpenOrder(GetOrderResponseType order) {
if (order == null) {
return false;
}
if (order.getOrderSummary() == null) {
return false;
}
if (order.getOrderSummary().getState() == null) {
return false;
}
return order.getOrderSummary().getState().toString().toLowerCase().startsWith("open");
}
推荐阅读
- python - 如何在一个类中删除从另一个类创建的对象
- pandas - 如何使用 pandas 的 reindex 方法“ffill”插入数据?
- android - Flutter 布局不一致
- unity3d - (Unity3d)为什么quad上的视频纹理质量低于原始视频?
- image - 有没有办法为使用 Codeigniter 的文件夹中的每个图像调用返回单个图像?
- wso2 - WSO2 租户身份验证失败
- docker - 如何配置 nginx 以在 docker django 应用程序中提供静态文件
- java - 异步与新线程 - 需要解决方案的帮助(Java)
- html - 响应式设计制作
- matlab - 计算 KKT 系数