即使我每次将供应商用于流并且每次要检索我的strem并对其执行终端操作时都使用Supplier.Get(),我仍然会收到“流已被操作或关闭”的信息。例外。有人可以看一下我的代码并建议我做错了什么吗?
引发异常的方法:
private static void printMyDetails(Supplier<Stream<Result>> mySupplier,String myStatus) {
checkNotNull(mySupplier);
checkArgument(isnotEmpty(myStatus),"Invalid My status");
if (mySupplier.get().noneMatch(result -> true)) { //<-This is where the exception is thrown
if (log.isInfoEnabled()) {
log.info("Number of My with status '{}': {}",My,0);
}
} else {
log.info("Number of My with status '{}': {}",myStatus,mySupplier.get().count());
log.info("Details of My(s) with status: '{}'",myStatus);
mySupplier.get().sorted().forEach(Utils::printMyNameAndDetails);
}
}
正在调用上述方法的地方
rb.keySet().stream().filter(key -> containsIgnoreCase(key,"status")).map(rb::getString)
.filter(StringUtils::isnotEmpty).forEach(status -> {
var resultsWithExpectedStatusSupplier = requireNonNull(getResultsWithExpectedStatusSupplier(results,status));
resultsWithExpectedStatusSupplier.ifPresentOrElse(streamSupplier -> printMyDetails(streamSupplier,status),() -> {
if (log.isInfoEnabled())
log.info("0 My with status: {}",status);
});
});
流提供者:
private static Optional<Supplier<Stream<Result>>> getResultsWithExpectedStatusSupplier(
@NotNull List<Result> results,@NotNull String expectedStatus) {
checkArgument(!results.isEmpty(),"Results list is empty");
checkArgument(isnotEmpty(expectedStatus),"Invalid expected status");
var resultStreamWithExpectedStatus = requireNonNull(results.stream().filter(result -> ofNullable(result).map(Result::getStatus)
.allMatch(s -> isnotEmpty(s) && s.equalsIgnoreCase(expectedStatus))));
return resultStreamWithExpectedStatus.count() == 0 ? Optional.empty() : Optional.of(() -> resultStreamWithExpectedStatus);
}