【发布时间】:2017-01-19 07:43:55
【问题描述】:
如何在 java8(可能是记忆过程)中重用已经通过流迭代计算的值?
如果流被复制或再次提供,它将被重新计算。在某些情况下,最好用内存换取 CPU 时间。从头开始收集所有内容可能不是一个好主意,因为流用于查找满足谓词的第一个项目。
Stream<Integer> all = Stream.of(1,2,3,4,5, ...<many other values>... ).
map(x->veryLongTimeToComputeFunction(x));
System.out.println("fast find of 2"+all.filter(x->x>1).findFirst());
//both of these two lines generate a "java.lang.IllegalStateException: stream has already been operated upon or closed"
System.out.println("no find"+all.filter(x->x>10).findFirst());
System.out.println("find again"+all.filter(x->x>4).findFirst());
问题类似于Copy a stream to avoid "stream has already been operated upon or closed" (java 8)
【问题讨论】:
标签: java java-8 java-stream memoization