java - 如何使用 Java SE 8 Stream API 实现这一点?
问题描述
我试过下面的代码转换成 java8 :
List<Value> values = valueRepository.findByCorp(corpId, type, "NONE");
Map<Integer, List<String>> map = new HashMap<>();
List<Value> tempList = new ArrayList<>();
//This is working code snippet
values.forEach(v -> {
for (Product product : products) {
if (!isEditable(map.get(product.getProductId()), v.getId().getCode()) ||
"TEST".equals(v.getId().getCode())) {
continue;
}
temList.add(v);
break;
}
});
private boolean isEditable(List<String> list, String type) {
return list != null && list.size() > 0 && list.contains(type);
}
这是我迄今为止尝试过的东西:
values.forEach(v -> {
Optional<ProductDTO> findProduct = products.stream().filter(isEditable(map.get(product.getProductId()), v.getId().getCode()) ||
!"TEST".equals(v.getId().getCode())).findFirst();
if(findProduct.isPresent()) {
temList.add(v);
}
});
但它不以某种方式工作。任何帮助都是非常可观的。
解决方案
使用了错误的逻辑运算符,更改||
为&&
:
values.forEach(v -> {
Optional<ProductDTO> findProduct = products.stream().filter(isEditable(map.get(product.getProductId()), v.getId().getCode()) &&
!"TEST".equals(v.getId().getCode())).findFirst();
if(findProduct.isPresent()) {
temList.add(v);
}
});
推荐阅读
- java - Spring Boot 应用无法使用 SSH 启动
- android - 在 AMD 处理器上运行 android 模拟器
- veins - 802.11p 中是否有最大单播消息数?
- angular - Angular 9:为什么我的自定义 EventEmitter 不起作用?
- reactjs - 单击 /profile 后,我登陆路径 /login。在 /profile 上再次完成登录后如何自动登陆?
- java - 将文件发送到 PHP
- json - JSONDecoderError:额外数据
- python - 多类文本分类的合适 LSTM 模型是什么?张量流 2.x
- .htaccess - 生产服务器配置以使用 autoloader/htaccess
- bash - 查找其中一个文件中不存在字符串的子目录