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
相关产品推荐
相关产品推荐

