您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

单行获取Stream / List的最后一个元素

单行获取Stream / List的最后一个元素

可以使用Stream :: reduce方法获取最后一个元素。下面的清单包含一般情况的最小示例:

Stream<T> stream = ...; // sequential or parallel stream
Optional<T> last = stream.reduce((first, second) -> second);

此实现适用于所有有序流包括List创建的流)。对于无序流,由于显而易见的原因,未指定将返回哪个元素。

该实现适用于 和 。乍一看这可能令人惊讶,但是不幸的是文档没有明确说明。但是,它是流的重要功能,我尝试对其进行澄清:

与密切相关的收集器的文档更加明确:“为确保 和 产生 ,收集器功能必须满足标识和关联性约束。”

回到原始问题:以下代码将对最后一个元素的引用存储在变量中last,如果流为空,则引发异常。复杂度在流的长度上是线性的。

CArea last = data.careas
                 .stream()
                 .filter(c -> c.b@R_55_2419@.orientationHorizontal)
                 .reduce((first, second) -> second).get();
其他 2022/1/1 18:20:15 有470人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶