在java 8流上存储/重用中间结果

Pra*_*yot 7 java java-8 java-stream

我有一个A列表,要执行过滤我需要将A映射到B.但是一旦过滤逻辑完成,我仍然需要A进行进一步的操作,所以我的问题是它是否可以实现这一点?我能想到的一种方法是将A和B都存储到第三种类型中,所以我在处理流时都可用,但不确定它是否优雅并且想知道这是否是更好的方法.或者我是否想要适合通过使用溪流在圆孔中的方形钉.

List<A> a;
List<B> b = a.stream().map(i -> load(i)).filter(need A here in addition to b)
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 3

好吧,你总是可以传递包裹在Pair,中的两个东西arrayList例如:

a.stream().map(i -> List.of(load(i), i)) // List#of is java-9, replace with Pair or array
          .filter(x -> x[0]...)
          .filter(y -> /* y is List here */)
Run Code Online (Sandbox Code Playgroud)