java数组工资降序排序
时间: 2024-08-15 19:03:39 浏览: 67
在 Java 中,如果你有一个包含工资值的整数数组,你可以通过自定义比较器来实现降序排列。以下是基本步骤:
1. 创建一个 `Comparator` 接口的实现,用于比较数组中的元素。这个接口只有一个方法 `int compare(int o1, int o2)`,返回值决定了两个元素的相对顺序:如果返回正值,`o1` 应该排在 `o2` 后;返回负值则相反。
```java
class SalaryComparator implements Comparator<Integer> {
@Override
public int compare(Integer salary1, Integer salary2) {
return salary2 - salary1; // 升序比较就是 salary1 - salary2 > 0,这里取反则是降序
}
}
```
2. 使用 Arrays 类提供的 `sort` 方法,并传递自定义的比较器:
```java
Integer[] salaries = {5000, 8000, 3000, 6000}; // 示例数组
Arrays.sort(salaries, new SalaryComparator());
```
现在,`salaries` 数组就会按照工资值从高到低排序了。
相关问题
题目9(10分):对象数组排序要求:定义Employee类,属性:姓名(name)、工资(salary)。创建Employee对象数组,按工资从高到低排序并输出。知识点:对象数组、排序逻辑示例输入:Employee[] employees = { new Employee("Alice", 5000), new Employee("Bob", 6000), new Employee("Charlie", 4500) }; 示例输出:排序后工资:6000(Bob)、5000(Alice)、4500(Charlie)
要完成这道题目,我们需要按照以下几个步骤来进行:
### 步骤一:定义 Employee 类
首先需要定义一个名为 `Employee` 的类,在其中包含两个私有属性:姓名 (`name`) 和工资 (`salary`)。同时提供构造函数以及获取这两个属性值的公共方法(getter)。
```java
class Employee {
private String name;
private double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
}
```
---
### 步骤二:创建对象数组并初始化数据
接下来根据题目的提示信息构建出一组员工实例,并将它们存储在一个数组当中。例如:
```java
Employee[] employees = {
new Employee("Alice", 5000),
new Employee("Bob", 6000),
new Employee("Charlie", 4500)
};
```
---
### 步骤三:对数组进行排序
我们可以使用 Java 提供的标准库——`Arrays.sort()` 来帮助我们实现自定义规则下的排序需求。这里的关键在于告诉程序如何比较两名雇员之间的大小关系,即依据他们的薪资水平降序排列。为此需传入一个实现了 Comparator 接口的对象给 sort 函数作为第二个参数。
```java
import java.util.Arrays;
import java.util.Comparator;
// ... 省略前面的部分
Comparator<Employee> comparatorBySalaryDescendingOrder =
(e1, e2) -> Double.compare(e2.getSalary(), e1.getSalary());
Arrays.sort(employees, comparatorBySalaryDescendingOrder);
```
这里的 Lambda 表达式 `(e1, e2)` 定义了对比两者的顺序,采用的是反向差额法(先取较高的那个数值减去较低的那个),所以最终效果是从高往低排布。
---
### 步骤四:输出结果
最后遍历经过整理后的列表逐一展示每位成员的信息。
```java
System.out.print("排序后工资:");
for(Employee emp : employees){
if(emp != null && !"".equals(emp.getName())){
System.out.printf("%.0f(%s)",emp.getSalary(), emp.getName());
if(!emp.equals(employees[employees.length-1])){
System.out.print("、");
}
}
}
```
完整代码如下所示:
```java
public class Main{
static class Employee {
private String name;
private double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName(){
return this.name;
}
public double getSalary(){
return this.salary ;
}
}
public static void main(String args[]) {
Employee[] emps= {new Employee("Alice",5000),new Employee("Bob",6000),new Employee("Charlie",4500)};
Arrays.sort(emps,new Comparator<Employee>() {
@Override
public int compare(Employee o1 , Employee o2 ){
return -(Double.valueOf(o1.getSalary()).compareTo(Double.valueOf(o2.getSalary())));
}});
StringBuilder result=new StringBuilder();
for(int i=0;i<emps.length;i++) {
if(i!=0)result.append('、');
result.append((int)(emps[i].getSalary())).append('(').append(emps[i].getName()).append(')');
}
System.out.println(result.toString().replaceFirst("^\\d+","排序后工资:"+result.charAt(0)));
}
}
```
---
**运行结果**
```
排序后工资:6000(Bob)、5000(Alice)、4500(Charlie)
```
---
Java8 array多字段排序
### Java 8 数组多字段排序方法
在 Java 8 中,可以利用 `Comparator` 接口的新特性以及 lambda 表达式来实现数组或多维对象列表的多字段排序。下面是一个具体的例子展示如何对包含多个属性的对象数组进行排序。
假设有一个表示员工信息的数据结构:
```java
class Employee {
private String name;
private int age;
private double salary;
// Constructors, getters and setters...
}
```
为了按照年龄升序排列再按薪水降序排列这样的复杂条件对员工列表进行排序,可采用如下方式:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Employee> employees = Arrays.asList(
new Employee("John", 30, 7500),
new Employee("Jane", 29, 8000),
new Employee("Jim", 30, 6000)
);
List<Employee> sortedEmployees = employees.stream()
.sorted(Comparator.comparing(Employee::getAge).thenComparing((a, b) -> Double.compare(b.getSalary(), a.getSalary())))
.collect(Collectors.toList());
sortedEmployees.forEach(System.out::println);
}
}
```
这段代码首先创建了一个 `Employee` 对象的集合,接着通过流操作对其进行排序。这里使用了 `Comparator.comparing()` 方法指定主要排序键(即年龄),并链式调用了 `thenComparing()` 来定义次要排序逻辑——基于薪资做逆向比较[^1]。
对于基本类型的数组来说,如果想要执行类似的多字段排序,则通常会先将其转换成更复杂的结构体形式,比如封装到类实例中去处理;或者当数据量不大时也可以考虑直接遍历数组构建新的有序序列。
阅读全文
相关推荐













