繁体   English   中英

如何在返回具有多个条件的布尔值的方法上使用流

[英]How to use stream on method that return boolean value with multiple condition

我正在使用这种方法:

private boolean getUsageDisabled(controlUnitVersion cUv) {
  Partnumber partn=cUv.getcontrolUnit().getpartnumber();

  for (controlUnit cu: partn.getcontrolUnit()) {
    for (ControlUnitVersion cUv2: cu.getcontrolUnitVersion()) {
      for (release r: cUv2.getRelease()) {
        if (r.getWorkflowState().getKey().equals("locked") || 
          r.getWorkflowState().getKey().equals("released")) {
          return true;
        }
      }
    }
    return false;
  }
}

我希望能够使用 Stream 更改它,我尝试了以下方法,但我遗漏了一些东西:

partn.getcontrolUnit()
  .stream()
  .forEach(cu -> cu.getControlUnitVersion()
    .stream()
    .filter(cUv2 -> cUv2.getrelease()
      .stream()
      .forEach(release -> {
        if (release.getWorkflowState().getKey().equals("locked") ||
          release.getWorkflowState().getKey().equals("released")) {
          return true; 
        }
      })
    )
  );

但我收到一个错误。

您有一个列表列表,并且您想在嵌套列表中使用流执行一些计算。 flatMap() 方法可以解决您的问题。

并且您想返回一个布尔值,如果流中有任何元素匹配给定条件,则 anyMatch() 可能是一个不错的选择。

partn.getcontrolUnit().stream()
.flatMap(cu -> cu.getcontrolUnitVersion().stream())
.anyMatch(r -> r.getWorkflowState().getKey().equals("locked") || r.getWorkflowState().getKey().equals("released"));

暂无
暂无

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

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