【发布时间】:2018-09-02 02:03:18
【问题描述】:
我有以下代码:
private List<EmployeeDto> doTransformation(List<Employee> employees, Optional<Predicate<Employee>> filter, Integer limit, Integer offset) {
Stream<Employee> stream = filter.isPresent() ? employees.stream().filter( filter.get() ) : employees.stream();
// do offset sql based for stream //not working
if ( offset != null ) {
stream.skip( offset );
}
// do limit sql based for stream //not working
if ( limit != null ) {
stream.limit( limit );
}
return stream
.map( employee -> /*do some mapping to EmployeeDto*/ )
.collect( Collectors.toList() );
}
在这部分代码中:
- 如果存在过滤器,则对流应用过滤器;
- 想要为此流做一些 offset 和 limit 但这不起作用,因为“应该对流进行操作(调用中间或终端流操作)仅一次”。
- 映射到 dto 对象并收集为列表。
其他方式skip()和limit()如何进行流操作? 提前致谢。
【问题讨论】:
-
我无法重现这个。这是一个 example 与
filter、offset和limit工作正常。请发布复制的 MCVE 以及您获得的完整异常。 -
您遇到了什么问题?我已经用跳过和限制运行了你的例子,它工作正常。
-
@lexicore 你的那个代码不是动态应用
skip和filter只在需要的时候,那么这与这个问题有什么关系呢? -
@badCoder 您需要手动处理它,因为 Java 不提供任何 API 来测试流是否关闭。
标签: java dynamic java-8 java-stream