- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 JUnit
和 Stream
时出现以下错误消息:
java.lang.IllegalStateException: stream has already been operated upon or closed
我做了一个研究,很明显不可能重用流
但是根据这篇文章:
与 Supplier
合作可以解决此问题。
所以我当前的代码如下:
try (Stream<String> stream = Files.lines(Paths.get(fileName)) ) {
Supplier<Stream<String>> supplier = () -> stream;
logger.info("A");
logger.info("ABC {}", supplier.get().findFirst().get());
logger.info("B");
logger.info("XYZ {}", supplier.get().skip(1050).findFirst().get());
logger.info("C");
assertThat(supplier.get().count(), is(1051));
}
catch (IOException e) {
logger.error("{}", e.getMessage());
}
你怎么看我使用 supplier.get()
来处理 Stream
(它与教程一致),但是@Test
打印到 B,因此 @Test
在 supplier.get().skip(1050).findFirst( ).get()
并且它仍然生成相同的错误消息。
我的代码和教程之间的独特区别在于,mime 通过文件工作,而教程围绕数组工作。
有什么特别的东西可以毫无问题地编辑吗?
阿尔法
我做了以下版本(根据Eugene的代码片段)
try (Stream<String> stream = Files.lines(Paths.get(fileName)) ) {
Supplier<Stream<String>> supplier = () -> stream.collect(Collectors.toList()).stream();
logger.info("A");
logger.info("ABC {}", supplier.get().findFirst().get());
logger.info("B");
logger.info("XYZ {}", supplier.get().skip(1050).findFirst().get());
logger.info("C");
assertThat(supplier.get().count(), is(1051));
}
同样的错误信息。
最佳答案
Supplier
并不神奇,您仍然需要始终从该 Supplier 提供一个新流。
所以你可以这样做:
Supplier<Stream<String>> supplier = () -> Files.lines(Paths.get(fileName));
但这意味着要一直读取文件。您可以将所有行读入单个 List
,将其存储在内存中并从中流
。
List<String> allLines = Files.readAllLines(Paths.get(fileName));
Supplier<Stream<String>> supplier = () -> allLines.stream();
请注意,即使是您链接的教程也会返回一个新的 Stream,它是通过 Stream.of
创建的,如下所示:
Supplier<Stream<String>> streamSupplier = () -> Stream.of(array);
关于Java 8 : Supplier working with files throws "stream has already been operated upon or closed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44506038/
根据甲骨文, static CompletableFuture supplyAsync(Supplier supplier)Returns a new CompletableFuture that i
当我尝试运行我的 SupplierConsumer 时遇到这些错误 eclipse 中的类。这是我的代码: public class SupplierConsumer{ public stat
我需要多次提供文件的 Stream 以便可以在不同时间对其执行不同的操作,我使用了以下供应商: Supplier> linesSupplier = () -> { try {
每当需要对象时,我都会使用 Supplier 创建列表的实例。 Supplier supplier = ()->Optional.of(new LinkedList<>()); 从 Recursive
本文整理了Java中org.jclouds.location.suppliers.all.ZoneToRegionToProviderOrJustProvider类的一些代码示例,展示了ZoneToR
给定以下类: class Logger { public void log(String someInfo, String someOtherInfo,
我想在 Kotlin 脚本中使用 Java 网络套接字 API 接收 HTTP 请求。 我只需要请求中的两行,所以我尝试将整个请求作为字符串行获取,对其进行迭代,并为这两行中的每一行获取与正则表达式匹
我用了Supplier经常,我在看新的 Guava 10 Optional现在。 与 Supplier 相比,Optional 保证永远不会返回 null,而是会抛出 IllegalStateExce
我一直在尝试使用 collect method of Stream , 将列表转换为 HashMap。我使用以下代码作为引用: String result = list.parallelStream(
如何将 Runnable 转换为 Supplier? public T useSupplier(Supplier supplier) { // Does something with sup
我有一个方法列表,其中有 Supplier用于返回不同类型的默认值的参数。但是,在某些情况下,我需要抛出异常(未经检查)而不是值。 目前,我必须为每个函数定义传递 lambda,但我想创建供应商实例以
我如何使用 Java8 Supplier 接口(interface)重写此工厂方法以提供正确的类型化实例? 我有一个扩展 Map 的简单接口(interface): public interface
所以我正在尝试重构以下代码: /** * Returns the duration from the config file. * * @return The duration. */ pr
前言 Java 8 中提供了许多函数式接口,包括Function、Consumer、Supplier、Predicate 等等。这 4 个接口就是本篇将要分享的内容,它们都位于 java.u
本文整理了Java中org.jclouds.location.suppliers.fromconfig.ZoneIdsFromConfiguration类的一些代码示例,展示了ZoneIdsFromC
为什么不能编译? : import java.util.Optional; public class Demo { Optional getOption() { return
为什么不能编译? : import java.util.Optional; public class Demo { Optional getOption() { return
我正在尝试查找给定字符串中的单词数。下面是它的顺序算法,效果很好。 public int getWordcount() { boolean lastSpace = true;
我正在尝试在这样的流中使用 Supplier 实现惰性评估 public static void main(String[] args) { Supplier> expensiveLi
据我所知,此方法会记住(缓存)作为参数传递的供应商的值。据我了解,它的行为类似于单例模式。谁能解释它是如何工作的? public static Supplier memoize(final Su
我是一名优秀的程序员,十分优秀!