浅谈Java的Comparator接口实现自定义排序Arrays.sort()

时间:2020-12-23 15:36:33

使用Comparator接口:编写多个排序方式类实现Comparator接口,并重写新Comparator接口中的compare()方法。升序是前者减去后者,降序是后者减去前者。


题目描述:

从A、B、C、D、E5个方面对每一家酒店进行评价收集,并给出1-5星的评分(整数),排序规则如下:

(1)优先按照最低星数进行排序,最低星数高者居前。

(2)在最低星数相同时,按照平均星数排序,平均星数高者居前。

(3)若最低星数和平均星数相同,则序号(从0开始)小者居前。

输入:

第一行输入酒店数目n,下面n行,每行5个数值,分别对应5个方面的评分(整数)。

5

4 4 5 3 5

3 3 3 3 3

5 4 4 3 5

5 5 5 5 5 

5 2 4 3 4

输出:

排序后的酒店序号(数据里出现的顺序编号,从0开始)。

3 2 0 1 4

import java.util.*;
public class Main {
public static class Node {
public int min;
public int sum;
public int index;
Node(int a, int b, int c) {min = a; sum = b; index = c;}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
scanner.nextLine();
Node[] nodes = new Node[num];
for (int i = 0; i < num; i++) {
String str = scanner.nextLine();
String[] strs = str.split(" ");
int min = Integer.MAX_VALUE;
int sum = 0;
for (int j = 0; j < 5; j++) {
int data = Integer.parseInt(strs[j]);
if (data < min)
min = data;
sum += data;
}
nodes[i] = new Node(min, sum, i);
}
Arrays.sort(nodes, new Comparator<Node>() {
public int compare(Node node1, Node node2) {
if (node1.min == node2.min) {
if (node1.sum == node2.sum)
return node1.index - node2.index;
else
return node2.sum - node1.sum;
}
else
return node2.min - node1.min;
}
});
for (int i = 0; i < num; i++)
System.out.print(nodes[i].index + " ");
}
}