在单行中获取流/列表的最后一个元素
2022-08-31 07:42:55
如何在以下代码中获取流或列表的最后一个元素?
其中 是 :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()
last()
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);
但是,它确实涉及在每个元素上使用a,这很可能不是您通常想要的,因为它会损害性能。indexOf