Найдите последний элемент, соответствующий дорогостоящему условию, из списка, используя Stream.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Найдите последний элемент, соответствующий дорогостоящему условию, из списка, используя Stream.

Сообщение Anonymous »

У меня есть упорядоченный список, содержащий примерно один миллион элементов, из которых я ищу последний элемент, соответствующий определенному условию, но это условие сложно вычислить, поэтому лучше начать с конца. . Всегда есть элементы, совпадающие примерно по log(n), минимум 1.

Я могу сделать это вручную:

Код: Выделить всё

List elements = ...;
Element element = null;
for (var it = elements.listIterator(elements.size()); it.hasPrevious(); ) {
var candidate = it.previous();
if (heavyConditionPredicate.test(candidate)) {
element = candidate;
break;
}
}
Есть ли способ написать это с использованием Stream, чтобы HeavyConditionPredicate не проверялся для каждого элемента списка? Если бы HeavyConditionPredicate не было бы так сложно вычислить, я бы использовал альтернативные средства, но мне не так повезло.

Обратите внимание, что elements может быть любым типом List, и тот, который я получаю, не обязательно реализует RandomAccess, поэтому доступ к списку по их индексу также может быть дорогостоящим.

Подробнее здесь: https://stackoverflow.com/questions/610 ... ing-stream
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»