Как я могу повторно использовать в java8 (возможно, процесс memoization) значения, уже вычисленные с помощью итерации по потоку?поток Java8 с memoization
Если поток дублируется или поставляется снова, он будет пересчитан. В некоторых случаях было бы предпочтительнее торговать память за это время процессора. Сбор всего с самого начала может быть не очень хорошей идеей, так как поток используется для поиска первого элемента, который удовлетворяет предикату.
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) всего напоминает
Но это будет выполнять veryLongTimeToComputeFunction для всех полей, в конце концов, чтобы сохранить первый. – raisercostin