Java 流在循环中的使用

标签 java java-stream

我对 Java 流很陌生。我是否需要在此循环中每次都重新创建流,或者是否有更好的方法来执行此操作?创建流一次并使用 .noneMatch 两次会导致“流已关闭”异常。

for ( ItemSetNode itemSetNode : itemSetNodeList )
{
  Stream<Id> allUserNodesStream = allUserNodes.stream().map( n -> n.getNodeId() );

  Id nodeId = itemSetNode.getNodeId();
  //if none of the user node ids match the node id, the user is missing the node
  if ( allUserNodesStream.noneMatch( userNode -> userNode.compareTo( nodeId ) == 0 ) )
  {
    isUserMissingNode = true;
    break;
  }
}

谢谢!

最佳答案

我建议您列出循环外的所有用户 ID。只需确保类 Id 覆盖 equals() 函数即可。

List<Id> allUsersIds = allUserNodes.stream().map(n -> n.getNodeId()).collect(Collectors.toList());

for (ItemSetNode itemSetNode : itemSetNodeList)
{
    Id nodeId = itemSetNode.getNodeId();

    if (!allUsersIds.contains(nodeId))
    {
        isUserMissingNode = true;
        break;
    }
}

关于Java 流在循环中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49242863/

相关文章:

java - PHP 和 Java 编码问题

java - 如何在应用程序加载时加载@FeignClient

java - 将列表总结为流的限制

java - 将多数组json解析为POJO

java - Android listView ArrayList 类似搜索

java - for 循环中数组元素的减法 (java.lang.ArrayIndexOutOfBoundsException)

java - Collectors.toSet() 中的哪个 Set 实现?

java - 等价于 Scala dropWhile

Java - 按子列表大小对列表进行排序

java - 使用 Java 8 流过滤内部 Map 的值