Streams Optional 查找得分最高的问题,并带有>>] >> [ /大家好!我真的在为这种方法而苦苦挣扎。我必须找出分数最高的问题,并用 minimumviews对其进行过滤。 public Stream<Question> stream() { Stream<Question> questionStream = Arrays.stream(items); questionStream.forEach(System.out::println); return questionStream; } public Optional<Question> findHighestScoringQuestionWith(int minimumViews){ return stream() .sorted(Comparator.comparing(Question::getScore)) .filter(x -> x.getViewCount() >= minimumViews) .findFirst(); } //如果有人可以帮助我解决此问题,我将不胜感激。我先谢谢大家。 //我的例外 Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed at java.base/java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203) at java.base/java.util.stream.ReferencePipeline.<init>(ReferencePipeline.java:94) at java.base/java.util.stream.ReferencePipeline$StatefulOp.<init>(ReferencePipeline.java:725) at java.base/java.util.stream.SortedOps$OfRef.<init>(SortedOps.java:126) at java.base/java.util.stream.SortedOps.makeRef(SortedOps.java:63) at java.base/java.util.stream.ReferencePipeline.sorted(ReferencePipeline.java:463) at stackoverflow.Data.sortedStream(Data.java:156) at stackoverflow.Main.main(Main.java:14) /大家好!我真的在为这种方法而苦苦挣扎。我必须找出分数最高的问题,并且必须用minimumviews对其进行过滤。公共Stream stream(){... Stream操作被划分为 intermediate 和terminal 操作,并被组合以形成streampipes。流管道由一个源(例如Collection,一个数组,一个生成器函数或一个I / O通道)组成。随后是零个或多个中间运算,例如Stream.filter或Stream.map;以及Stream.forEach或Stream.reduce等终端操作。 -Package Summary for java.util.stream java.util.stream是 terminal操作,表示它完成了stream pipeline 。例外情况中所述,当调用terminal操作(已对其进行了[[operated)时,将评估整个stream pipe。如果要进行多个终端操作,则需要设置多个 流管道。 要对数据中间流执行某些操作,可以使用Stream.forEach:Stream.peek 这将打印出流中的所有项目, 但仅在调用一次终端操作后才,并对流进行评估。在您的情况下,该终端操作在public Stream<Question> stream() { Stream<Question> questionStream = Arrays.stream(items); questionStream.peek(System.out::println); // <- return questionStream; } public Optional<Question> findHighestScoringQuestionWith(int minimumViews){ return stream() .sorted(Comparator.comparing(Question::getScore)) .filter(x -> x.getViewCount() >= minimumViews) .findFirst(); } 方法中为Stream.findFirst。 流是一次性对象,您不能多次使用它们。 问题是您在stream()方法中调用findHighestScoringQuestionWith,因此返回之前它已经用完。如果您确实要打印内容,则可以执行questionStream.forEach

问题描述 投票:-2回答:2
/大家好!我真的在为这种方法而苦苦挣扎。我必须找出分数最高的问题,并用

minimumviews对其进行过滤。

public Stream<Question> stream() { Stream<Question> questionStream = Arrays.stream(items); questionStream.forEach(System.out::println); return questionStream; } public Optional<Question> findHighestScoringQuestionWith(int minimumViews){ return stream() .sorted(Comparator.comparing(Question::getScore)) .filter(x -> x.getViewCount() >= minimumViews) .findFirst();
}

//如果有人可以帮助我解决此问题,我将不胜感激。我先谢谢大家。

//我的例外

Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed at java.base/java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203) at java.base/java.util.stream.ReferencePipeline.<init>(ReferencePipeline.java:94) at java.base/java.util.stream.ReferencePipeline$StatefulOp.<init>(ReferencePipeline.java:725) at java.base/java.util.stream.SortedOps$OfRef.<init>(SortedOps.java:126) at java.base/java.util.stream.SortedOps.makeRef(SortedOps.java:63) at java.base/java.util.stream.ReferencePipeline.sorted(ReferencePipeline.java:463) at stackoverflow.Data.sortedStream(Data.java:156) at stackoverflow.Main.main(Main.java:14)

/大家好!我真的在为这种方法而苦苦挣扎。我必须找出分数最高的问题,并且必须用minimumviews对其进行过滤。公共Stream 

stream(){...

java foreach java-stream optional
2个回答
2
投票
Stream操作被划分为

intermediate

terminal

0
投票
问题是您在stream()方法中调用findHighestScoringQuestionWith,因此返回之前它已经用完。如果您确实要打印内容,则可以执行questionStream.forEach
© www.soinside.com 2019 - 2024. All rights reserved.