Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >首先按薪资排序Employee对象列表,如果薪资相等,则按姓名排序

首先按薪资排序Employee对象列表,如果薪资相等,则按姓名排序
EN

Stack Overflow用户
提问于 2016-03-13 12:02:56
回答 2查看 30.5K关注 0票数 0

是否可以先按employee对象的薪水排序,如果两个对象的薪水相等,然后使用可比较和比较器接口按名称进行比较?

例如,我有一个Employee类,如下所示

代码语言:javascript
运行
AI代码解释
复制
public class Employee{
    private int salary;
    private int name;
    public Employee(salary,name){
        this.salary = salary;
        this.name = name;
    }
    //...........getter methods...........
}

现在假设我们有一个Employee对象列表,其中包含一些工资金额和姓名。我想使用比较器或可比较的接口,并以这样的方式排序列表,列表是基于工资排序的,如果工资相同,那么在这种情况下,这两个Employee对象必须按其名称排序。有没有人能告诉我这是否可能?如果能有一个代码片段,我们将非常感激。

EN

回答 2

Stack Overflow用户

发布于 2016-03-13 12:13:06

Java 8让这一切变得非常简单:

代码语言:javascript
运行
AI代码解释
复制
List<Employee> list = ...
list.sort(Comparator.comparing(Employee::getSalary).thenComparing(Employee::getName));
票数 3
EN

Stack Overflow用户

发布于 2016-03-13 12:21:53

是的,你可以在两个步骤中实现它;

对象实现了int interface

  • Provide ( o)函数可比的
  1. 实现

公有类Employee实现可比的{ String name;double sal;//其他实现public int compareTo(Object o1) { Employee e= (Employee)o1;int iSalComaprison = Integer.compare(this.sal,e.sal);if (iSalComaprison == 0)//工资相等,使用name作为比较条件{ //lhs name与rhs name return name.compareTo(e.name)比较{}//现在如果薪资不相等,则返回薪资比较返回iSalComaprison;} }

您可以看到,首先我们对薪水进行比较,如果发现它们相等,我们可以使用名称进行比较,并直接从if块返回字符串比较结果。如果工资不相等,那么我们可以简单地返回工资比较结果,

代码语言:javascript
运行
AI代码解释
复制
int iSalComaprison = Integer.compare(this.sal, e.sal);

希望这能帮助你解决使用比较器模式的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35969967

复制
相关文章
MySQL单表查询
3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
changxin7
2019/09/10
18K0
SQL学习笔记四(补充-1)之MySQL单表查询
3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
Jetpropelledsnake21
2019/02/15
2.1K0
MySQL的单表多表查询
#4.like 'fdfdsf': parttern可以是%或_。 %表示任意多字符,_表示一个字符
老油条IT记
2020/03/23
14.6K0
mysql-单表查询
mysql> create table employee(id int primary key auto_increment,name  varchar(20) not null,sex enum('male','female') not null default 'male',age int(3) unsigned not null default 28,hire_date date not null,post varchar(50),post_comment varchar(100),salary  double(15,2),office int,depart_id int);
py3study
2018/08/03
4.4K0
MySQL单标查询
查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据。下面是完整的一个单表查询的语法 select * from,这个select * 指的是要查询所有字段的数据。 SELECT distinct 字段1,字段2... FROM 库名.表名 #from后面是说从库的某个表中去找数据,mysql会去找到这个库对应的文件夹下去找到你表名对应的那个数据文件,找不到就直接报错了,找到了就继续后面的操作 WHERE 条件 #从表中找符合条件的数据记录,where后面跟的是你的查询条件 GROUP BY field(字段) #分组 HAVING 筛选 #过滤,过滤之后执行select后面的字段筛选,就是说我要确定一下需要哪个字段的数据,你查询的字段数据进行去重,然后在进行下面的操作 ORDER BY field(字段) #将结果按照后面的字段进行排序 LIMIT 限制条数 #将最后的结果加一个限制条数,就是说我要过滤或者说限制查询出来的数据记录的条数关于上面这些内容,我们在下面一个一个的来详细解释
changxin7
2022/05/06
2.7K0
20 - 如果列表元素是对象,该如何进行排序
1. 如果列表元素是对象,对这样的列表排序有哪些方法 ? class MyClass: def __init__(self): self.value = 0 ''' def __gt__(self, other): return self.value > other.value ''' def __lt__(self, other): return self.value > other.v
ruochen
2021/05/23
1.1K0
20 - 如果列表元素是对象,该如何进行排序
在线Coding题目 例如:部门表(id,名称...),员工表(id,部门id,姓名,薪资,入职时间...), 查出部门中薪资最高的员工;部门薪资总和;
coderlwz
2023/10/22
2440
List列表按照对象进行排序
本文介绍了如何根据传入的排序字段,对List列表中的对象进行排序。首先介绍了排序字段及排序规则,然后通过一个实例展示了如何使用该方法,最后给出了通用的排序工具方法。
程序新视界
2018/01/08
1.4K0
基于业务对象(列表)的排序
在上一篇文章 基于业务对象的筛选 中,我们讨论了如何实现Predicate<T>(T object)委托,自定义DateFilter 类来对业务对象进行筛选。与筛选一样,排序也是常见且重要的操作。在对业务对象进行排序时,不能使用ObjectDataSource作为数据源,因为它只对 DataView、DataTable 和 DataSet 支持自动排序。但你仍可以对GridView编写Sorting事件的处理方法,通过拼装SQL语句,使用“Order By”子句来完成排序。
张子阳
2018/09/30
2K0
学习python第三天数据库day2
day01回顾: 数据库: 定义:存储数据的仓库(database,简称db) 常用的数据库对象有哪些? 1).数据表(table) ***** 2).视图(view) 3).索引(index) 4).序列(sequence) 主流的关系型数据库有哪些?(枚举) oracle、mysql、sqlserver、db2... 谈一谈oracle和mysql的区别? oracle: 1).收费的(贵) 2).数据的存储量大,安全性高、效率比较快 mysql: 1).免费 2).数据的存储量小(相对而言的),安全系数以及效率方面较低(相对而言的) sql:structure query language(结构化查询语言) 分类: DDL:结构层面的操作,自动提交,无法回滚 比较强硬 包括的常用的操作如下: 建表、删表、修改表、清空表 --> 总结:结构发生变化了,都是ddl操作 建表的格式: create table 表名( 列名1 数据类型(长度), 列名2 数据类型(长度), ... 列名n 数据类型(长度) ); 建完表格之后我们可以使用desc关键字去查看表结构, desc关键字的使用如下: desc 表名; DML:数据层面的操作:不会自动提交,可以回滚比较柔和 包括的常用的操作如下: 增加数据(insert into ...) 删除数据(delete from 表名 where ...) 修改数据(update 表名 set 列名1 = 值1,列名2 = 值2,... where ...) 查询数据(select ... from 表名) 总结: 对于删除和修改数据而言,一般情况下都需要配合where子句进行相应的操作,否则会出现全删或者全改的问题!! DCL: 两个关键字:commit(提交)、rollback(回滚) day02(上午): 出题思考如何实现? 1).查询公司员工的编号,姓名,薪资,奖金率以及月收入? 以下代码有问题:因为有null值参与了算数运算,导致结果直接为null了,出现了与现实不符的情况!! select employee_id,last_name,salary,commission_pct,salary + salary * commission_pct from employees; 使用去空置换函数:nvl(m,n): 执行过程如下: 如果m得到的内容不为null,那么就拿它本身参与运算 如果m得到的内容为null,那么就用n的值参与运算 重构以上代码: select employee_id,last_name,salary,commission_pct,salary + salary * nvl(commission_pct,0) from employees; sql中的别名: 概念:使用别名的思想,可以让显示变得更加的优雅、简洁!并且可以优化我们的代码... 起别名有三种方式: 方式一: select employee_id,last_name,salary,commission_pct,salary + salary * nvl(commission_pct,0) as month_sal from employees; 方式二: select employee_id,last_name,salary,commission_pct,salary + salary * nvl(commission_pct,0) month_sal from employees; 方式三: select employee_id,last_name,salary,commission_pct,salary + salary * nvl(commission_pct,0) "month_sal" from employees; 比较理解以上的三种方式: 方式二可以认为是方式一的简化版,它们定义的别名在查询显示的时候,都是以全大写来进行显示 如果想要控制显示的大小写(效果),我们可以使用方式三来完成;我们可以认为方式三才是最实用的方式 where子句: 在查询数据的时候,很多情况下我们需要过滤掉一些不需要的内容,所以需要用到where子句来实现 记住: where紧随from 运算符: 分类: 1).比较运算符: 范围: >大于 >=大于等于 <小于 <=小于等于 =等于 <>不等于(还可以这么写:!=) 案例阶段: ①.查询员工号为200的员工的姓名、薪资和入职时间? select last_name,salary,hire_date from employees where employee_id = 200; ②.查询工资大于80
hankleo
2020/09/16
3820
Java 中使用 Collections 的最佳实践
Collections 是 Java 中操作集合类数据结构的工具类。它提供了一系列可以操作 List、Set 和 Map 的静态方法,可以辅助开发人员进行集合的常用操作,如排序、搜索、遍历等。
用户1289394
2023/09/11
3680
Java 中使用 Collections 的最佳实践
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。
云深i不知处
2020/11/12
3.6K0
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
Java8中的stream,可大幅提升咱们的开发效率,带大家看下stream到底有哪些常见的用法,一起来过一遍。
Java旅途
2022/03/04
1.3K0
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
姓名按照首字母排序
姓名按照首字母排序 private List<UserInfo> userInfoSort = new ArrayList<>();//记录排好序的数据 private void nickNameSort(List<UserInfo> userInfo) { // 实例化对象,当前环境设置为CHINA 中文 Comparator comparator = Collator.getInstance(Locale.CHINA); List<String> list =
是阿超
2022/06/07
1.7K0
Elasticsearch 6.x:先按照评分排序,再按照时间排序
现在需要先按照评分排序,再按照文档时间进行二次排序。 由于评分“_score”是个虚字段,排序时需要特殊处理。
程裕强
2022/05/06
8140
python中列表排序,字典排序,列表中的字典排序
key= lambda dict1:dict1[0] #dict1[0]表示按键,dict1[1]表示按值。
用户8346838
2021/03/10
9.2K0
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
点击上方蓝色字体,选择“设为星标” 回复”学习资料“获取学习宝典 来源:blog.csdn.net/mu_wind/article/details/109516995 Java8 Stream 先贴上几个案例,水平高超的同学可以挑战一下: 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里。 统计员工的最高薪资、平均薪资、薪资之和。 将员工按薪资从高到低排序,同样薪资者年龄小者在前。 将员工按性别分类,将员工按性别和地区分类,将员工按薪资是否高于8000分为两部分。 用传统的迭代处理
猿天地
2022/03/14
7720
【Java 基础篇】Java 自然排序:使用 Comparable 接口详解
在 Java 编程中,我们经常需要对对象进行排序。为了实现排序,Java 提供了 java.lang.Comparable 接口,它允许我们定义对象之间的自然顺序。本篇博客将深入探讨如何使用 Comparable 接口来进行自然排序,包括接口的基本概念、使用示例以及一些常见问题的解决方法。
繁依Fanyi
2023/10/12
1.3K0
【Java 基础篇】Java 自然排序:使用 Comparable 接口详解
MySQL单表查询的操作和注意事项
基本语法格式: SELECT 字段1,字段2... FROM 表名                   WHERE 条件                   GROUP BY field 分租                   HAVING 筛选                   ORDER BY field 排序                   LIMIT 限制条数
星哥玩云
2022/08/16
1.2K0
MySQL之单表查询
一、单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二、关键字的执行顺序 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4.将
人生不如戏
2018/04/10
4.9K0

相似问题

显示薪资、薪资(薪资)、收入高于公司薪资的员工姓名(薪资)

17

试图显示薪资高于平均薪资的导师姓名

12

如果薪资大于

111

我想在列表中存储基于已排序薪资的类对象

31

从employee表中查找薪资总和

469
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文