Java 惰性字符串流,包括 List<String>

标签 java list java-stream lazy-evaluation

我正在为前两个简单项目懒惰地创建一个字符串流。但是,我的流的一部分是字符串列表。

Stream<String> streamA = Stream.concat(
      Stream.generate(item::getStringA),
      Stream.generate(item::getStringB))

return Stream.concat(streamA, item.getStringList(param).stream())

上面的方法有效,但是 .getStringList 也需要延迟调用。我不清楚如何获取它并将其与流的其余部分“合并”。

最佳答案

我认为,你真正想做的是

return Stream.<Supplier<Stream<String>>>of(
    () -> Stream.of(item.getStringA()),
    () -> Stream.of(item.getStringB()),
    () -> item.getStringList(param).stream())
    .flatMap(Supplier::get);

这会产生一个完全惰性的 Stream<String>哪里,例如.limit(0).count()不会调用 item 上的任何方法或.findFirst()只会调用getStringA()

流的内容将等于

Stream.concat(
    Stream.of(item.getStringA(), item.getStringB()), item.getStringList(param).stream())

关于Java 惰性字符串流,包括 List<String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39129491/

相关文章:

list - Haskell 列表理解

c# - 查找通过多个键分组的海量数据 C#

java - JSP模板实现(Composite View Pattern)

java - 按时间戳优先合并两个文件夹

python - 按字符串python选择一个列表

java - 调节 java 流的过滤器

java - 如何使用流将 Collectors.groupingby 收集器创建的列表元素映射到其他类型?

java - 在 Java 中折叠顺序流

java - Full GC 什么时候触发?

java - JNI 将 TreeMap 从 java 传递到 c