Две терминальные операции в одном выражении
Обновлено: 04.11.2024
Я делаю некоторую «алгебру» потоков Java 8, то есть я пытаюсь закодировать простую операционную операцию, которая принимает два потока в качестве входных данных и в результате дает другой поток.
Итак, у меня есть простой код, цель которого - напечатать второе по величине значение в серии чисел:
Эта программа не будет работать, если я не разделю однострочную операцию следующим образом:
Хранение операции в одной строке вызовет это исключение:
Исключение в потоке "main" java.lang.IllegalStateException: поток уже был обработан или закрыт .
Я понимаю, что это связано с присущей ему ленивой метода filter (). API объясняет:
Потоковые операции подразделяются на промежуточные (генерирующие поток) и терминальные (создающие побочные эффекты). Промежуточные операции всегда ленивы.
И фактически, трассировка стека показывает, что операция не выполняется, пока я не попытаюсь получить доступ к ее результату в следующей строке.
Является ли это поведение ошибочным дизайном в Java 8? Это ошибка? И самое главное, как я могу сохранить операцию в одной строке и заставить ее работать?
Читайте также: