首页 > 解决方案 > 如何使用 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);
            }
  });

但它不以某种方式工作。任何帮助都是非常可观的。

标签: javajava-8

解决方案


使用了错误的逻辑运算符,更改||&&

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

推荐阅读