如何使用JavaSE8流API实现这一点?
我已尝试将以下代码转换为java8:如何使用JavaSE8流API实现这一点?,java,java-8,Java,Java 8,我已尝试将以下代码转换为java8: List<Value> values = valueRepository.findByCorp(corpId, type, "NONE"); Map<Integer, List<String>> map = new HashMap<>(); List<Value> tempList = new ArrayList<>(); //This is working c
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);
}
List values=valueRepository.findByCorp(corpId,键入“NONE”);
Map Map=newhashmap();
List templast=new ArrayList();
//这是有效的代码片段
值。forEach(v->{
用于(产品:产品){
如果(!isEditable(map.get(product.getProductId()),v.getId().getCode())||
“TEST”.equals(v.getId().getCode()){
继续;
}
增加(五);
打破
}
});
私有布尔值可编辑(列表,字符串类型){
返回列表!=null&&list.size()>0&&list.contains(类型);
}
以下是我迄今为止尝试过的东西:
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->{
可选findProduct=products.stream().filter(可编辑(map.get(product.getProductId()),v.getId().getCode())||
!“TEST”。等于(v.getId().getCode()).findFirst();
if(findProduct.isPresent()){
增加(五);
}
});
但不知何故,它不起作用。任何帮助都是非常有用的。使用了错误的逻辑运算符,请将
|
更改为&&
:
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->{
可选findProduct=products.stream().filter(可编辑(map.get(product.getProductId()),v.getId().getCode())&&
!“TEST”。等于(v.getId().getCode()).findFirst();
if(findProduct.isPresent()){
增加(五);
}
});
流式传输值的内容
并通过使用(否定)条件将每个值与所有产品进行比较来过滤它们。您的条件是跳过/继续-否定时相同的条件将导致在最终结果中包含值
tempList = values.stream()
.filter(value -> !"TEST".equals(value.getId().getCode())
.filter(value -> products.stream()
.anyMatch(product -> isEditable(map.get(product.getProductId()),
value.getId().getCode()))
.collect(Collectors.toList());
不使用isEditable功能
List<Value> tempList = values.stream()
.filter(v -> v.getId().getCode() != "TEST")
.filter(v -> products.stream()
.map(p -> map.get(p.getProductId()))
.filter(Objects::nonNull)
.filter(l -> l.size() > 0)
.filter(l -> l.contains(v.getId().getCode()))
.findFirst().isPresent())
.collect(Collectors.toList());
List templast=values.stream()
.filter(v->v.getId().getCode()!=“测试”)
.filter(v->products.stream()
.map(p->map.get(p.getProductId())
.filter(对象::非空)
.filter(l->l.size()>0)
.filter(l->l.contains(v.getId().getCode())
.findFirst().isPresent())
.collect(Collectors.toList());
你到底想做什么?该代码已经是Java 8,因为values.forEach(v->{
在Java 8之前是无效的Java语法。说您想将Java 8代码转换为Java 8是没有意义的。@Andreas wnat要通过Java 8流API实现此功能,请编辑问题并说“转换为Java 8”听起来像是在从另一种语言转换。因为Java与早期版本向后兼容(大部分情况下),例如,将Java 7转换为Java 8是没有意义的,因为Java 7源代码已经在Java 8中完全发挥作用。没有什么可以转换的。什么不起作用?你能分享一个示例测试数据来说明吗?还有其他一些未知因素,如产品
,空映射
,对于实际的context.另一方面,如果你首先查找
,然后忽略实际值,我认为最好使用anyMatch
。你的标题没有反映你文章的内容。这会使搜索变得困难。