Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaSE8流API实现这一点?_Java_Java 8 - Fatal编程技术网

如何使用JavaSE8流API实现这一点?

如何使用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

我已尝试将以下代码转换为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);
  }
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
。你的标题没有反映你文章的内容。这会使搜索变得困难。