Получить последний элемент потока/списка в одну строкуJAVA

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

Сообщение Anonymous »

Как получить последний элемент потока или списка в следующем коде?

Где data.careas — это List< /код>:

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

CArea first = data.careas.stream()
.filter(c -> c.bbox.orientationHorizontal).findFirst().get();

CArea last = data.careas.stream()
.filter(c -> c.bbox.orientationHorizontal)
.collect(Collectors.toList()).; //how to?
Как видите, получить первый элемент с определенным фильтром несложно.

Однако получение последнего элемента в однострочном файле — это настоящая боль:
  • Кажется, я не могу получить его напрямую из потока< /код>. (Это имеет смысл только для конечных потоков)
  • Также кажется, что вы не можете получить такие вещи, как first() и Last() из списка, что действительно неприятно.
Я не вижу никаких аргументов в пользу отсутствия first() и Last() в интерфейсе List, поскольку элементы там упорядочены, и, более того, размер известен.

Но согласно исходному ответу: Как получить последний элемент конечного потока?

Лично это самое близкое, что я мог получить:

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

int lastIndex = data.careas.stream()
.filter(c -> c.bbox.orientationHorizontal)
.mapToInt(c -> data.careas.indexOf(c)).max().getAsInt();
CArea last = data.careas.get(lastIndex);
Однако это предполагает использование indexOf для каждого элемента, что, скорее всего, вам обычно не нужно, поскольку это может снизить производительность.

Подробнее здесь: https://stackoverflow.com/questions/214 ... -one-liner
Ответить

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

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

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

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

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