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

如何使用Java Streams比较Score对象的points并返回最值对象?

嗨,我来帮你搞定这个问题!用Java Streams找出ArrayList<Score>里points最高或最低的对象其实没那么复杂,我给你拆解清楚,再附上完整的代码示例,你一看就懂。

首先,先确认你的Score类得有获取points的方法(比如getPoints()),假设你的类结构是这样的:

class Score {
    private int points;

    public Score(int points) {
        this.points = points;
    }

    // 必须要有这个 getter 方法,Stream要靠它提取points值
    public int getPoints() {
        return points;
    }

    // 可选:重写toString方便打印结果
    @Override
    public String toString() {
        return "Score{points=" + points + "}";
    }
}

获取最高points的对象

用Stream的max()方法,配合Comparator.comparingInt()来指定按points字段比较:

// 假设你已经有了ArrayList<Score> scores
Optional<Score> highestScore = scores.stream()
        .max(Comparator.comparingInt(Score::getPoints));

获取最低points的对象

同理,用min()方法就行:

Optional<Score> lowestScore = scores.stream()
        .min(Comparator.comparingInt(Score::getPoints));

关键细节(你之前可能踩坑的地方)

  • 返回的是Optional<Score>而不是直接的Score:这是为了处理列表为空的情况(空列表没有最高/最低分),避免返回null导致空指针。你可以这样安全处理结果:
    • 如果只想在对象存在时做操作:highestScore.ifPresent(score -> System.out.println("最高分: " + score));
    • 如果确定列表不可能为空,或者想在空的时候抛异常:Score highest = highestScore.orElseThrow(() -> new IllegalStateException("分数列表为空!"));
    • 或者给个默认值:Score defaultScore = new Score(0); Score highest = highestScore.orElse(defaultScore);

完整运行示例

把这些拼起来,完整代码如下:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Optional;

public class ScoreStreamExample {
    public static void main(String[] args) {
        ArrayList<Score> scores = new ArrayList<>();
        scores.add(new Score(85));
        scores.add(new Score(92));
        scores.add(new Score(78));
        scores.add(new Score(95));
        scores.add(new Score(88));

        // 找最高分对象
        Optional<Score> highestScore = scores.stream()
                .max(Comparator.comparingInt(Score::getPoints));
        highestScore.ifPresent(score -> System.out.println("最高分对象: " + score));

        // 找最低分对象
        Optional<Score> lowestScore = scores.stream()
                .min(Comparator.comparingInt(Score::getPoints));
        lowestScore.ifPresent(score -> System.out.println("最低分对象: " + score));
    }
}

运行后会输出:

最高分对象: Score{points=95}
最低分对象: Score{points=78}

如果你的points字段是Integer类型(不是基本类型int),把comparingInt换成comparing也可以,不过comparingInt对基本类型更高效哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:34:24