java - Java lambda 返回包含重复代码问题的列表
问题描述
当我尝试通过lambda 表达式获取列表时,我有一个问题。代码看起来像
Collection<Order> updateOrders = orderCodes.stream().filter(orderCode -> {
List<String> iccids = new ArrayList<>();
ShippedOrder shippedOrder = orderMap.get(orderCode);
iccids.addAll(getSimEsnByShippedOrder(shippedOrder));
Optional<Order> maybeOrder = orderRepository.findByCode(orderCode);
return maybeOrder.isPresent() && !iccids.isEmpty();
}).map(orderCode -> {
List<String> iccids = new ArrayList<>();
ShippedOrder shippedOrder = orderMap.get(orderCode);
iccids.addAll(getSimEsnByShippedOrder(shippedOrder));
Optional<Order> maybeOrder = orderRepository.findByCode(orderCode);
Order order = maybeOrder.get();
List<String> existedEsnList = order.getEsnList();
if(!existedEsnList.isEmpty())
iccids.addAll(existedEsnList);
order.setEsnList(iccids);
return order;
}).collect(Collectors.toList());
很明显,filter()和map()中出现了一段重复的代码,同理,数据库被访问了2次。如何减少代码?谢谢
解决方案
第一个解决方案可能是:
List<String> l = List.of("a", "b", "c");
l.stream().map((String orderCode)->{
boolean isOrderPresent = true;
if(isOrderPresent)
return orderCode + " order"; //return Order object
else
return null;
})
.filter(ss-> ss!= null)
.map((String order) -> {
System.out.println(order); // else use order.orderCode
return order;
}).collect(Collectors.toList());
或者您可以像这样维护 <OrderCode, Order> 的映射:
List<String> l = List.of("a", "b", "c");
Map<String, String> map = new HashMap<>();
l.stream().filter((String s)->{
map.put(s, s+" order");
return !s.isEmpty();
})
.forEach((String s) -> {
System.out.println(map.get(s)); //<== retrieve Orders from local map
});
推荐阅读
- php - 在 Imagick 的 resizeImage() 函数不起作用的情况下,在大小值数组上使用 foreach() - PHP
- python - AWS MQTT Python awsiotsdk 和 awscrt 包偶尔会失败,并在跟踪日志中重复消息
- vue.js - 为什么couchdb登录良好但couchdb会话为空,使用vuejs和pouchdb
- java - 不是抽象的,也不会覆盖抽象方法
- python - 尝试使用 fontstretch 关键字参数使用 matplotlib 制作细长的 Text 实例
- javascript - 自动垂直滚动,用鼠标中键垂直滚动时很好,但用手机触摸滚动时就不行了
- c# - 当文件很小/空白时保存文件很好,但当文件较大时表示访问被拒绝
- javascript - 挂钩函数构造函数 (JavaScript)
- r - 当行超过某些数字时,R apply 无法获得多个分钟
- javascript - 在 Vue.js 中从 DOM 中删除组件