Как проверить, что поток Java 8 содержит два конкретных элемента?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как проверить, что поток Java 8 содержит два конкретных элемента?

Сообщение Anonymous »

Предположим, у меня есть список List, и я хочу выполнить поиск по этому списку, чтобы убедиться, что у меня есть и Civic, и Focus. Если это ИЛИ, это очень просто: я могу просто применить ИЛИ к .filter(). Имейте в виду, что я не могу использовать filter().filter() для этого типа AND.
Рабочим решением было бы сделать:

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

boolean hasCivic = reportElements.stream()
.filter(car -> "Civic".equals(car.getModel()))
.findFirst()
.isPresent();

boolean hasFocus = reportElements.stream()
.filter(car -> "Focus".equals(car.getModel()))
.findFirst()
.isPresent();

return hasCivic && hasFocus;
Но тогда я фактически обрабатываю список дважды. Я не могу применить && в фильтре и не могу выполнить filter().filter().
Есть ли способ однократно обработать поток найти, есть ли в списке автомобиль Civic и Focus?
Ключевая проблема с некоторыми из предоставленных решений заключается в том, что они гарантируют O(n), тогда как мое решение может быть выполнено сразу после два сравнения. Если мой список автомобилей составит, скажем, 10 миллионов машин, это приведет к очень значительным потерям производительности. Однако мое решение кажется неправильным, но, возможно, это лучшее решение с точки зрения производительности...

Подробнее здесь: https://stackoverflow.com/questions/456 ... ents-in-it
Ответить

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

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

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

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

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