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

如何不使用for/while循环,通过Stream提取自定义类字段生成列表?

基于Java Stream API实现自定义Pair类字段提取与去重方案

你要的实现不需要任何显式for/while循环,核心是通过flatMap操作平铺每个Pair的两个字段,再做去重收集即可,完整实现代码如下:

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class PairStreamDemo {
    public static void main(String[] args) {
        // 构造测试用的Pair列表
        List<Pair<Integer, Integer>> pairList = List.of(
                new Pair<>(3, 5),
                new Pair<>(5, 7)
        );

        // 核心Stream处理逻辑
        List<Integer> result = pairList.stream()
                // 将每个Pair平铺为包含first、second两个元素的整数流
                .flatMap(pair -> Stream.of(pair.first(), pair.second()))
                // 去重
                .distinct()
                // 收集为列表
                .collect(Collectors.toList());

        // 输出结果:[3, 5, 7]
        System.out.println(result);
    }
}

// 你提供的Pair类定义
class Pair<T,U> {
    private final T first;
    private final U second;

    public Pair(T first, U second){
        this.first = first;
        this.second = second;
    }

    T first() {
        return this.first;
    }

    U second(){
        return this.second;
    }

    @Override
    public String toString(){
        return "<" + this.first + ", "+ this.second+">";
    }
}

关键步骤说明

  • flatMap操作:负责把每个Pair对象转换成包含两个字段值的Stream,再把所有生成的小流合并成一个完整的整数字段流,是实现多字段提取不需要循环的核心
  • distinct操作:依赖Integer类原生实现的equals和hashCode方法完成重复值的过滤
  • 如果你要在其他包下调用Pair的first()、second()方法,需要把这两个方法的访问权限改为public,否则会抛出访问权限异常

内容的提问来源于stack exchange,提问作者Heartless

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:27:00