我有项目列表,我需要在每个项目上创建一些计算。 每个计算都由前面的元素构建。
例如:
List<Object> Users=new ArrayList<>();
users.stream().filter(element->calculateSomething(<need-prev-element-input>).findFirst();
calculateSomething将返回true / false取决于流
中的prev元素计算结果知道我该怎么做?
答案 0 :(得分:4)
Streams 不旨在能够执行此类操作。你可能能够共同破解某些东西,但它会很糟糕;你应该回去使用普通循环。
答案 1 :(得分:4)
如果你真的想使用流,请在索引上流式传输:
IntStream.range(1, users.size())
.filter(i -> calculateSomething(users.get(i-1) , users.get(i)))
.map(users::get)
.findFirst();
还有许多非标准库允许您从列表中对流进行流式传输。
答案 2 :(得分:0)
以下是Java 8的做法:
<T extends User> Optional<T> findUserSomehow(List<T> users) {
for (int idx = 1; idx < users.size(); ++idx)
if (calculateSomething(users.get(idx - 1)))
return Optional.of(users.get(idx));
return Optional.empty();
}