Java如何使用流映射返回布尔值

时间:2017-12-11 04:29:37

标签: lambda foreach java-8 java-stream

我正在尝试为结果返回一个布尔值。

 public boolean status(List<String> myArray) {
      boolean statusOk = false;
      myArray.stream().forEach(item -> {
         helpFunction(item).map ( x -> {
              statusOk = x.status(); // x.status() returns a boolean
              if (x.status()) { 
                  return true;
              } 
              return false;
          });
      });
}

lambda表达式中使用的抱怨变量应该是final或者有效的final。 如果我指定statusOk,那么我无法在循环内分配。如何使用stream()和map()返回布尔变量?

2 个答案:

答案 0 :(得分:8)

您正在使用错误的流...

你不需要在流上做foreach,而是调用anyMatch而不是

public boolean status(List<String> myArray) {
      return myArray.stream().anyMatch(item -> here the logic related to x.status());
}

答案 1 :(得分:3)

看起来helpFunction(item)会返回某个具有boolean status()方法的类的实例,如果truehelpFunction(item).status(),您希望自己的方法返回true } {你的Stream的任何元素。

您可以使用anyMatch

实现此逻辑
public boolean status(List<String> myArray) {
    return myArray.stream()
                  .anyMatch(item -> helpFunction(item).status());
}