流已经被操作或关闭 - Java 8

Art*_*hur 1 java exception filter java-8 java-stream

为什么我有下一个例外?

Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203)...
Run Code Online (Sandbox Code Playgroud)

com.search.offer.OffersSelector.isGood(OffersSelector.java:23)如何更改代码来修复它?

Stream<String> titleExclusions = ResourceUtility.contentToUtf8TreeSet("+.txt").
        stream().filter(item -> item.length() == 0).collect(Collectors.toSet()).stream();
//...
titleExclusions.filter(tittle::contains).collect(Collectors.toSet()).size() == 0;//line 23
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 6

您不能多次对Streams进行操作,因此最好使用Collections,因为这些可以多次使用.

Set<String> titleExclusions = ResourceUtility.contentToUtf8TreeSet("+.txt")
                                             .stream()
                                             .filter(item -> !item.isEmpty())
                                             .collect(Collectors.toSet());
// uses titleExclusions 
boolean noMatches = titleExclusions.stream()
                                   .noneMatch(tittle::contains);
// uses titleExclusions again.
Run Code Online (Sandbox Code Playgroud)

注意:我假设您需要源文件中的非空行而不是空白行.filter获取Predicate保留的内容而不是丢弃的内容.

感谢@Holger简化第二个声明.

  • @Tunaki:...和`!(titleExclusions.stream().filter(tittle :: contains).findAny().isPresent())`与`titleExclusions.stream()相同.nonMatch(tittle :: contains)` . (4认同)