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

使用Comparator对ArrayList按单词得分降序排序的实现疑问

拼字游戏单词按得分排序实现方案

两种可行思路,按需选择

1. 直接基于原单词列表排序(无需新建集合)

如果你的单词得分计算逻辑不复杂、耗时低,可以直接在排序时实时计算得分,用lambda表达式实现Comparator。这样不用额外创建关联集合,代码更简洁:

首先确保你有一个计算单个单词得分的方法(比如calculateScore),然后直接调用列表的sort方法:

// 示例计算得分的方法(你可以替换成自己已实现的逻辑)
private static int calculateScore(String word) {
    int[] charScores = {1,3,3,2,1,4,2,4,1,8,5,1,3,1,1,3,10,1,1,1,1,4,4,8,4,10};
    int sum = 0;
    for (char c : word.toUpperCase().toCharArray()) {
        sum += charScores[c - 'A'];
    }
    return sum;
}

// 排序原单词列表(从高到低)
ArrayList<String> words = new ArrayList<>(Arrays.asList("apple", "orange", "grape"));
words.sort((word1, word2) -> Integer.compare(calculateScore(word2), calculateScore(word1)));

// 验证排序结果
for (String word : words) {
    System.out.println(word + " 得分:" + calculateScore(word));
}

这里lambda表达式里用calculateScore(word2)在前,word1在后,实现降序排序;如果要升序,反过来即可。

2. 新建关联单词与得分的集合(适合复杂计算场景)

如果得分计算逻辑复杂、重复计算会影响性能,或者后续需要频繁同时使用单词和得分,建议创建一个自定义类来封装两者,再对这个类的集合排序:

// 自定义类,存储单词和对应的得分
class ScrabbleWord {
    private String word;
    private int score;

    public ScrabbleWord(String word, int score) {
        this.word = word;
        this.score = score;
    }

    // 提供getter方法用于排序和取值
    public String getWord() { return word; }
    public int getScore() { return score; }
}

// 转换原单词列表为ScrabbleWord集合
ArrayList<String> originalWords = new ArrayList<>(Arrays.asList("apple", "orange", "grape"));
ArrayList<ScrabbleWord> scrabbleWords = new ArrayList<>();
for (String word : originalWords) {
    scrabbleWords.add(new ScrabbleWord(word, calculateScore(word)));
}

// 按得分降序排序
scrabbleWords.sort((sw1, sw2) -> Integer.compare(sw2.getScore(), sw1.getScore()));

// 遍历输出
for (ScrabbleWord sw : scrabbleWords) {
    System.out.println("单词:" + sw.getWord() + ",得分:" + sw.getScore());
}

这种方式只需要计算一次得分,后续排序和操作都直接用已存的score值,性能更优。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:21:52