如何将Streams Prev元素结果传递给下一个

时间:2017-06-26 16:03:29

标签: java functional-programming java-8 java-stream

我有项目列表,我需要在每个项目上创建一些计算。 每个计算都由前面的元素构建。

例如:

List<Object> Users=new ArrayList<>();
users.stream().filter(element->calculateSomething(<need-prev-element-input>).findFirst();

calculateSomething将返回true / false取决于流

中的prev元素计算结果

知道我该怎么做?

3 个答案:

答案 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();
}