如何在以下代码中获取流或列表的最后一个元素?
哪里data.careas
是List<CArea>
:
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?
正如你所看到的,获得第一个元素filter
并不难。
然而,在单行中获取最后一个元素是一个真正的痛苦:
- 看来我无法直接从
Stream
. (这只对有限流有意义) - 似乎您也无法从界面中获取诸如
first()
和之类的东西,这确实很痛苦。last()
List
我看不到在接口中不提供first()
andlast()
方法的任何论据List
,因为那里的元素是有序的,而且大小是已知的。
但根据原始答案:如何获得有限的最后一个元素Stream
?
就个人而言,这是我能得到的最接近的:
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
在每个元素上使用 an,这很可能不是您通常想要的,因为它会影响性能。