繁体   English   中英

如何用 Java SE 8 Stream API 实现这个?

[英]How to implement this with the 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);
        }
   });

不使用isEditable function

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());

Stream 值的内容,并通过使用您的(否定)条件将每个value与所有产品进行比较来过滤它们。 您的条件是跳过/继续-否定时相同会导致条件在最终结果中包含一个值。

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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM