愿眼中星河不坠 2021-12-06 10:19 采纳率: 50%
浏览 61
已结题

这不去重还能用Treeset么?怎么让三个都排序啊

三.分析以下需求,并用代码实现:
(1)定义一个员工类Employee,包含三个属性:姓名(String name)、年龄(int age)、工资(int salary)
(2)创建5个对象装入TreeSet,按照工资从高到底排序输出结果(工资相同,按照年龄从低到高,工资和年龄都相同,
按照姓名长度升序,但是不能去重(姓名、年龄、工资都相同))

我用Treeset写实在想不出来怎么搞?

public class test03 {
    public static void main(String[] args) {
        Employee e1 = new Employee("烬", 26, 6300);
        Employee e2 = new Employee("小炮", 25, 3150);
        Employee e3 = new Employee("伊泽瑞尔", 25, 4800);
        Employee e4 = new Employee("vn", 25, 4800);
        Employee e5 = new Employee("vn", 25, 4800);
        
        TreeSet<Employee> set = new TreeSet<>(new Comparator<Employee>() {
            @Override
            public int compare(Employee o1, Employee o2) {
                //创建5个对象装入TreeSet,按照工资从高到底排序输出结果(工资相同,按照年龄从低到高,工资和年龄都相同,
                //按照姓名长度升序
                int result1=o2.getSalary()-o1.getSalary();//按照工资从高到底排序输出结果
                int result2=o1.getName().length()-o2.getName().length();
                result1=result1 ==0?o1.getAge()-o2.getAge():result1;
                result2=result2 ==0?o1.getName().length()-o2.getName().length():result1;//获取name长度
                return result2;
            }
        });
        set.add(e1);
        set.add(e2);
        set.add(e3);
        set.add(e4);
        set.add(e5);
        for (Employee employee : set) {
            System.out.println(employee);
        }

    }
}

  • 写回答

2条回答 默认 最新

  • 再写三行 2021-12-06 19:50
    关注
    
                 TreeSet<Employee> set = new TreeSet<>(new Comparator<Employee>() {
                @Override
                public int compare(Employee o1, Employee o2) {
                    //创建5个对象装入TreeSet,按照工资从高到底排序输出结果(工资相同,按照年龄从低到高,工资和年龄都相同,
                    //按照姓名长度升序
                    int salaryRes=o2.getSalary()-o1.getSalary();//工资
                    int ageRes=o1.getAge()-o2.getAge();//年龄
                    int nameRes = o1.getName().length()-o2.getName().length();//姓名
                    int res = (salaryRes==0?ageRes:salaryRes)==0?nameRes:(salaryRes==0?ageRes:salaryRes);
                    return res;
                }
            });
    

    逻辑有问题 我改了一下可以了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月17日
  • 已采纳回答 12月9日
  • 创建了问题 12月6日

悬赏问题

  • ¥15 R运行没有名称为"species"的插槽对于此对象类"SDMmodelCV"
  • ¥20 基于决策树的数字信号处理,2ask 2psk 2fsk的代码,检查下报错的原因
  • ¥20 python作业求过程
  • ¥15 wincc已组态的变量过多
  • ¥60 如图:直线与椭圆X轴平行,求直线与椭圆任意一点的相切坐标计算公式
  • ¥50 如何用python使用opencv里的cv::cudacodec::VideoWriter函数对视频进行GPU硬编码
  • ¥100 c#solidworks 二次开发 工程图自动标边线法兰 等折弯尺寸怎么标
  • ¥15 halcon DrawRegion 提示错误
  • ¥15 FastAPI Uvicorn启动显示404
  • ¥15 centos7.9脚本,怎么排除特定的访问记录