当前位置: 首页 > 知识库问答 >
问题:

java流已关闭

阴靖
2023-03-14

我想使用stream getfirst方法两次,但是出现了一个错误,即(java.lang.IllegalStateException:stream已经被操作或关闭),并且这个流代码以此处命名的注释开始。

                //code
                Stream<Map.Entry<String,Integer>> sorted =
                        map.entrySet().stream()
                           .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()));
                
                Supplier<Stream<Map.Entry<String,Integer>>>  sort2 = () -> sorted;
                Optional<String> kk = Optional.of(sort2.get().findFirst().get().getKey());
                Optional<Integer> vv = Optional.of(sort2.get().findFirst().get().getValue());
                int vmax = vv.get().intValue() ;    
                int count=0;
                ArrayList<String> a = new ArrayList<String>() ;
                for(Map.Entry<String,Integer> h: map.entrySet() ) {
                    if(h.getValue()==vmax) {
                        a.add(h.getKey()) ;
                        count++;
                    }
                }
                
                if(count>1) {
                    Collections.sort(a);
                    System.out.println(a.get(0));
                    
                }
                else {
                    System.out.println(kk.get());
                }    
                map.clear();
    
            }       
        }
    }
        
    
     

共有1个答案

蒲功
2023-03-14

一个流不能使用两次。创建一个变量来保存findfirst()的值

 类似资料:
  • 问题内容: 我想复制一个Java 8流,以便可以处理两次。我可以collect列出并从中获得新的信息流; 但我认为应该有一种更有效/更优雅的方法。 有没有一种方法可以复制流而不将其转换为集合? 我实际上正在使用 流,因此想先处理左侧投影,然后再移至右侧投影并以另一种方式处理。有点像这样(到目前为止,我被迫使用这种技巧)。 问题答案: 你可以将局部变量与一起使用,以设置流管道的公共部分。 从http

  • 问题内容: 我正在尝试使用Stream API生成Order实例。我有一个创建订单的工厂函数,并且使用DoubleStream初始化订单金额。 如果我使用文字(1.0)初始化Order实例,则可以正常工作。当我使用doubleStream创建随机数量时,将引发异常。 问题答案: 答案在(重点是我的)的javadoc中: 流仅应操作一次(调用中间流或终端流操作) 。例如,这排除了“分叉”流,其中相同

  • 下面是我的代码: 从下面的函数调用上面的函数: 我不知道为什么。

  • 方法是 现在我试着像这样改成stream,但我不知道这种改是否正确: 如何避免出现例外,解决问题? 我应该以某种方式重构代码吗?

  • 问题内容: 如果我们使用Java 8 Stream,例如何时关闭此流? 作为下一个示例,我们关闭流是不是一个好习惯? 问题答案: 通常根本不需要关闭流。您只需要关闭使用IO资源的流。 从Stream文档中: 流具有方法和实现,但是实际上几乎所有流实例在使用后都不需要关闭。通常,只有源是IO通道的流(例如由返回的)才需要关闭。大多数流都由集合,数组或生成函数支持,而无需特殊的资源管理。(如果流确实需

  • 如果我们使用Java8流,比如