我正在为前两个简单项目懒惰地创建一个字符串流。但是,我的流的一部分是字符串列表。
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/