You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效收集列表中对象的同类型多属性值?

收集对象列表中多个同类型属性值的最优方式

你当前的写法需要遍历列表两次来分别收集两个属性值,再合并到Set中,当数据量较大时会有额外的遍历开销。下面是几种更高效的实现方式,均只需一次遍历即可完成:

方式1:使用flatMap合并流

这是最符合Stream API风格的写法,通过flatMap将每个对象转换为包含两个ID的流,再合并为单一流后收集到Set:

Set<Long> allIds = is.stream()
    .flatMap(issue -> Stream.of(issue.getId1(), issue.getId2()))
    .collect(Collectors.toSet());

方式2:处理可能的null值

如果id1或id2存在为null的情况,可添加过滤步骤避免null被加入Set:

import java.util.Objects;

Set<Long> allIds = is.stream()
    .flatMap(issue -> Stream.of(issue.getId1(), issue.getId2())
        .filter(Objects::nonNull))
    .collect(Collectors.toSet());

方式3:命令式的forEach写法

如果偏好更直观的命令式风格,直接通过forEach遍历一次并添加两个ID:

Set<Long> allIds = new HashSet<>();
is.forEach(issue -> {
    allIds.add(issue.getId1());
    allIds.add(issue.getId2());
});

对比原写法的优势

原代码需要两次遍历列表,而上述三种方式均只需一次遍历,在列表规模较大时能显著减少遍历开销,同时代码更紧凑简洁。

内容的提问来源于stack exchange,提问作者S.Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:42:04