最佳答案
如何在下面的代码中获取流或列表的最后一个元素?
其中 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
获得它。(它只对有限的流有意义)List
接口得到像 first()
和 last()
这样的东西,这真的很痛苦。我没有看到任何不在 List
接口中提供 first()
和 last()
方法的论点,因为那里的元素是有序的,而且大小是已知的。
但是根据最初的答案: 如何得到有限 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
,这很可能不是您通常想要的,因为它会损害性能。