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

Java中如何实现列表的升序与降序排序输出

Java ArrayList 升序/降序排序实现方法

针对你代码中nbAll集合的排序需求,可以用以下两种常用方案实现,你可以根据是否需要保留原集合的元素顺序选择:

方案1:直接对原集合排序(会修改原集合的元素顺序)

使用JDK自带的Collections工具类或者List接口的sort方法实现:

升序排序及输出

// 两种写法二选一即可
Collections.sort(nbAll); // Collections工具类写法
// nbAll.sort(Comparator.naturalOrder()); // List自带sort方法写法

// 输出排序后结果
System.out.println("升序排列的数值:");
for (Double num : nbAll) {
    System.out.println(num);
}

降序排序及输出

// 两种写法二选一即可
Collections.sort(nbAll, Collections.reverseOrder()); // Collections工具类写法
// nbAll.sort(Comparator.reverseOrder()); // List自带sort方法写法

// 输出排序后结果
System.out.println("降序排列的数值:");
for (Double num : nbAll) {
    System.out.println(num);
}

方案2:不修改原集合,生成新的排序后集合(推荐)

用Stream API生成新的已排序集合,不会改动原nbAll里的元素顺序:

升序排序及输出

List<Double> ascSortedList = nbAll.stream()
        .sorted()
        .toList();
System.out.println("升序排列的数值:");
ascSortedList.forEach(System.out::println);

降序排序及输出

List<Double> descSortedList = nbAll.stream()
        .sorted(Comparator.reverseOrder())
        .toList();
System.out.println("降序排列的数值:");
descSortedList.forEach(System.out::println);

代码整合示例

你可以把排序逻辑放在平均值计算完成之后,修改后的完整代码如下,同时修复了原代码里数值精度丢失、变量类型不合理的小问题:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;

public class ScoreCalculate {
    private static final ArrayList<Double> nbAll = new ArrayList<>();

    public static void test() {
        try (Scanner scanner = new Scanner(System.in)) {

            System.out.print("请输入你要计算的数值数量:");
            // 数值数量为整数,原代码用double接收不合理,修改为int
            int nb = scanner.nextInt();

            for (int i = 0; i < nb; i++) {
                double temp = scanner.nextDouble();
                nbAll.add(temp);
            }

            // 原代码用mapToInt会丢失小数精度,修改为mapToDouble保证计算准确
            double sum = nbAll.stream().mapToDouble(Double::doubleValue).sum();
            double result = sum / nb;
            System.out.println("平均值结果:" + result);

            // 新增排序输出逻辑,采用不修改原集合的Stream方案
            System.out.println("===== 升序排列结果 =====");
            nbAll.stream().sorted().forEach(num -> System.out.print(num + " "));
            System.out.println("\n===== 降序排列结果 =====");
            nbAll.stream().sorted(Comparator.reverseOrder()).forEach(num -> System.out.print(num + " "));

            retry();
        }
    }

    // 此处保留你原有retry方法的逻辑即可
    private static void retry() {
        // 原有业务逻辑
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:21:01