问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JAVA排序的问题

发布网友 发布时间:2022-05-12 07:25

我来回答

2个回答

热心网友 时间:2023-01-25 04:23

有很多方法实现,我写了一个,你看看,可以按需求自己修改

package com.random;

import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;

public class Client {
    public static void main(String[] args) {
        Set<Student> set = new HashSet<Student>();
        Student s1 = new Student(101, "刘备", "1班", 89.5f, 75f);
        Student s2 = new Student(106, "关羽", "1班", 78f, 69f);
        Student s3 = new Student(105, "张飞", "1班", 60.5f, 55f);
        Student s4 = new Student(104, "诸葛亮", "2班", 99.5f, 100f);
        Student s5 = new Student(103, "马超", "2班", 88.5f, 77f);
        Student s6 = new Student(102, "典韦", "3班", 88.5f, 88f);
        
        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(s4);
        set.add(s5);
        set.add(s6);
        
        System.out.println("--------未排序-------");
        for(Student s : set){
            System.out.println("学号:" + s.getId() + "  姓名:" + s.getName() + "  班级:" + s.getClassName()
                    + "  java成绩:" + s.getJavaScore() + "  sql成绩:" + s.getSqlScore()
                    + "  总成绩:" + (s.getJavaScore() + s.getSqlScore()) + " \n");
        }
        
        System.out.println("--------按学号升序排列-------");
        Set<Student> ascId = new TreeSet<Student>(getComparator("id", 0));
        ascId.addAll(set);
        for(Student s : ascId){
            System.out.println("学号:" + s.getId() + "  姓名:" + s.getName() + "  班级:" + s.getClassName()
                    + "  java成绩:" + s.getJavaScore() + "  sql成绩:" + s.getSqlScore()
                    + "  总成绩:" + (s.getJavaScore() + s.getSqlScore()) + " \n");
        }
        
        System.out.println("--------按学号降序排列-------");
        Set<Student> descId = new TreeSet<Student>(getComparator("id", 1));
        descId.addAll(set);
        for(Student s : descId){
            System.out.println("学号:" + s.getId() + "  姓名:" + s.getName() + "  班级:" + s.getClassName()
                    + "  java成绩:" + s.getJavaScore() + "  sql成绩:" + s.getSqlScore()
                    + "  总成绩:" + (s.getJavaScore() + s.getSqlScore()) + " \n");
        }
        
        System.out.println("--------按java成绩降序排列-------");
        Set<Student> descJava = new TreeSet<Student>(getComparator("javaScore", 1));
        descJava.addAll(set);
        for(Student s : descJava){
            System.out.println("学号:" + s.getId() + "  姓名:" + s.getName() + "  班级:" + s.getClassName()
                    + "  java成绩:" + s.getJavaScore() + "  sql成绩:" + s.getSqlScore()
                    + "  总成绩:" + (s.getJavaScore() + s.getSqlScore()) + " \n");
        }
        
        System.out.println("--------按sql成绩降序排列-------");
        Set<Student> descSQL = new TreeSet<Student>(getComparator("sqlScore", 1));
        descSQL.addAll(set);
        for(Student s : descSQL){
            System.out.println("学号:" + s.getId() + "  姓名:" + s.getName() + "  班级:" + s.getClassName()
                    + "  java成绩:" + s.getJavaScore() + "  sql成绩:" + s.getSqlScore()
                    + "  总成绩:" + (s.getJavaScore() + s.getSqlScore()) + " \n");
        }
        
        System.out.println("--------按总分降序排列-------");
        Set<Student> descAVG = new TreeSet<Student>(getComparator("avgScore", 1));
        descAVG.addAll(set);
        for(Student s : descAVG){
            System.out.println("学号:" + s.getId() + "  姓名:" + s.getName() + "  班级:" + s.getClassName()
                    + "  java成绩:" + s.getJavaScore() + "  sql成绩:" + s.getSqlScore()
                    + "  总成绩:" + (s.getJavaScore() + s.getSqlScore()) + " \n");
        }
        
        System.out.println("--------各班的java成绩平均分-------");
        Set<Entry<String, Float>> javaScore = groupByClass(set, "java").entrySet();
        for(Entry<String, Float> score : javaScore){
            System.out.println("班级:" + score.getKey() + " 平均成绩:" + score.getValue() + " \n");
        }
        
        System.out.println("--------各班的sql成绩平均分-------");
        Set<Entry<String, Float>> sqlScore = groupByClass(set, "sql").entrySet();
        for(Entry<String, Float> score : sqlScore){
            System.out.println("班级:" + score.getKey() + " 平均成绩:" + score.getValue() + " \n");
        }
    }
    
    //condition:按那个条件排序,order=0 升序,order为其他 降序
    public static Comparator<Student> getComparator(String condition, final int order){
        if("id".equals(condition)){
            return new Comparator<Student>(){
                @Override
                public int compare(Student s1, Student s2) {
                    if(order == 0){
                        return (s1.getId() > s2.getId() ? 1 : -1);
                        
                    }else{
                        return (s1.getId() > s2.getId() ? -1 : 1);
                    }
                }
            };
            
        }else if("javaScore".equals(condition)){
            return new Comparator<Student>(){
                @Override
                public int compare(Student s1, Student s2) {
                    if(order == 0){
                        return (s1.getJavaScore() > s2.getJavaScore() ? 1 : -1);
                        
                    }else{
                        return (s1.getJavaScore() > s2.getJavaScore() ? -1 : 1);
                    }
                }
            };
            
        }else if("sqlScore".equals(condition)){
            return new Comparator<Student>(){
                @Override
                public int compare(Student s1, Student s2) {
                    if(order == 0){
                        return (s1.getSqlScore() > s2.getSqlScore() ? 1 : -1);
                        
                    }else{
                        return (s1.getSqlScore() > s2.getSqlScore() ? -1 : 1);
                    }
                }
            };
            
        }else{
            return new Comparator<Student>(){
                @Override
                public int compare(Student s1, Student s2) {
                    if(order == 0){
                        return ((s1.getJavaScore() + s1.getSqlScore()) > (s2.getJavaScore() + s2.getSqlScore()) ? 1 : -1);
                        
                    }else{
                        return ((s1.getJavaScore() + s1.getSqlScore()) > (s2.getJavaScore() + s2.getSqlScore()) ? -1 : 1);
                    }
                }
            };
        }
    }
    
    public static Map<String, Float> groupByClass(Set<Student> st, String subject ){
        Map<String, Float> map = new HashMap<String, Float>();
        //java成绩平均分
        if("java".equals(subject)){
            for(Student s : st){
                Float scort = map.get(s.getClassName());
                if(scort != null){
                    map.put(s.getClassName(), (scort + s.getJavaScore())/2);
                    
                }else{
                    map.put(s.getClassName(), s.getJavaScore());
                }
            }
        //sql成绩平均分    
        }else{
            for(Student s : st){
                Float scort = map.get(s.getClassName());
                if(scort != null){
                    map.put(s.getClassName(), (scort + s.getSqlScore())/2);
                    
                }else{
                    map.put(s.getClassName(), s.getSqlScore());
                }
            }
        }
        return map;
    }
}

class Student {
    private long id;         //学号
    private String name;       //姓名 
    private String className;  //班级名称
    private float javaScore;  
    private float sqlScore;
    
    public Student(long id, String name, String className, 
            float javaScore, float sqlScore){
        this.id = id;
        this.name = name;
        this.className = className;
        this.javaScore = javaScore;
        this.sqlScore = sqlScore;
    }
    
    public Student(){};
    
    public long getId() {
        return id;
    }
    
    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getClassName() {
        return className;
    }
    public void setClassName(String className) {
        this.className = className;
    }
    public float getJavaScore() {
        return javaScore;
    }
    public void setJavaScore(float javaScore) {
        this.javaScore = javaScore;
    }
    public float getSqlScore() {
        return sqlScore;
    }
    public void setSqlScore(float sqlScore) {
        this.sqlScore = sqlScore;
    }
}


追问Student1 s1 = new Student1(101, "刘备", "1班", 89.5f, 75f);

这里的信息是我们自己输入的,不是固定的,我在输入的时候后面会把前面的覆盖,您能把上面的改成手动输入的吗,谢谢!

热心网友 时间:2023-01-25 05:41

select top 5 学号, 姓名, 班级, java成绩, SQL成绩, java成绩 + SQL成绩 as 总分 from Student
order by 学号, java成绩, SQL成绩, 总分

select 班级, avg(java成绩) as java成绩平均分, avg(Sql成绩) as Sql成绩平均分 from Student
group by 班级

求采纳追问我是要用java做而不是用数据库,谢谢

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
sometimesome timesometimessome times的区别 瓜地的午餐怎么造句 夏季宝宝不吃饭应该怎么办 狼人杀里面的白狼王模式怎么玩? 狼人杀白狼王和骑士:操作至上的高效玩法指南 狼人杀手游白狼王怎么玩 详细玩法攻略 狼人杀 狼人杀的白狼王怎么玩? 国产轮毂品牌有哪些 国产轮毂品牌哪个品牌好 国内轮毂有哪些品牌 岗位和职务怎么填 scala groupby返回值不是map如何解决? 为什么明明是太阳晒我,要说我晒太阳? java se 实现 group by操作 如果你也晒太阳,那么你希望在自己的身上留下什么样的花印 晒太阳给你一种怎样的体验? 早上吃再多都不会胖吗? 表格文字对比? 请问有什么工具可以比较两段文字的差异呀? 火影世界料理制作配方技巧攻略 料理有什么效果详解 想瘦吃早餐要远离那些食品 蔬食小饭团怎样做? 除了寿司、饭团、三明治还有什么简单易做的食品? 饭团可以用普通剩饭做吗? 菜心杆子小炒肉怎么做好吃 能否介绍下海豹饭团便当的推荐做法? 为什么我的脸上老是感觉有虫子在爬? 怎么消除满虫 怎样去脸上的螨虫 火影世界食材配方 脸上有满虫,怎么办?,谢谢 有什么软件可以比较两段基本相同文字的细微差异 hibernate 中的groupby 查询 如何提高远程桌面清晰度 java如何统计网站访问量? 如何利用word找出两段文字的不同之处 Java用Sql语句执行以下语句查询竖排表得到如下结果(横排表)?如何实现? 本科提档线对应的当年的一分一段怎么查? java题目 将一些学生分别按姓氏分类,每个姓氏的学生输出到一行上。 java中数据查询问题 电脑远程桌面监控清晰度 笔记本远程桌面模糊不清 微软远程桌面最高能支持多大的高清图像 远程桌面远程声音不清晰有短暂卡顿,画面清晰流畅,该如何解决,求大神帮助 摩托罗拉V8手机后部为何发热易常? PA10TL740HB物性表 PA10T和PA9T的形状有什么区别 10T千斤顶什么意思 厨房用水龙头哪个可以用呢? 天津高考17000名次能上什么大学 天津考生 21年分数655分,男生,有哪些高校、专业推荐?