题解 | #成绩排序#

成绩排序

https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b

Java数据结构-HashMap+流式编程

题目分析

输入数据:一组序列(名字,成绩)
操作目标:将数据排序 从低到高/从高到低,相等数据按照原序列排列

本题数据量不多,但是需要将字符串和数据对应起来
使用一个map将成绩和名字链表对应起来
然后使用一个数据存储对应的成绩,sort之后遍历输出

代码细节

  1. Scanner的使用:Scanner的nextInt()和nextLine()方法不能混合使用,如果需要读取整型和字符串,可以使用Integer.parseInt()方法进行转换;
  2. 流式编程复习 .mapToInt()是一个抽象的方法,可以填写具体的实现,sort()方法如果需要自定义Comparator,那么需要进行装箱的操作,toArray()可以将流转化为数组;
  3. Arrays.sort()方法默认为从低到高排序。

练习过程代码有所不完善和不优化,敬请指正(o゚v゚)ノ

代码

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 开始输入数据
        int nums = Integer.parseInt(scanner.nextLine());
        int manner = Integer.parseInt(scanner.nextLine());
        int[] scores = new int[nums];
        Map<Integer, List<String>> map = new HashMap<>();
        // 开始遍历数据
        for(int i=0;i<nums;i++){
            String[] info = scanner.nextLine().split(" ");
            int score= Integer.parseInt(info[1]);
            scores[i] = score;
            String name = info[0];
            List<String> list = map.getOrDefault(score,new ArrayList<>());
            list.add(name);
            map.put(score,list);
        }
        if(manner==1) Arrays.sort(scores);
        else scores = Arrays.stream(scores).boxed().sorted((n1,n2)->n2-n1).mapToInt(n->{return (int)n;}).toArray();
        // 开始遍历数组输出
        for(int score : scores){
            List<String> list = map.get(score);
            System.out.println(list.get(0)+" "+ score);
            list.remove(0);
        }
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务