package com.liu.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* copyright (c) 2018, 劉 斌 All rights reserved
* 檔案名稱:SortTest.java
* 摘要:集合之自定義多元度排序
* 作 者:liu bin
* 建立時間:2018 年 08 月 28 日
* 版 本:1.0
*/
public class SortTest {
public static void main(String[] args) {
SortTest sortTest = new SortTest();
List<User> userList = sortTest.getUserList();
sortTest.sortFinalList(userList);
for (int i = 0; i < userList.size(); i++) {
System.out.println(userList.get(i));
}
}
/**
* 擷取UserList,對集合中的user對象進行排序.
*
* @return
*/
public List<User> getUserList() {
List<User> userList = new ArrayList<User>();
User user1 = new User(12, 2, "張三");
User user2 = new User(12, 1, "李四");
User user3 = new User(15, 3, "王五");
User user4 = new User(11, 4, "趙六");
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
return userList;
}
/**
* 自定義排序:分數由低到高,升序排列,分數相同的情況下,按照userId升序排列,比如:
* (12,1,李四)-->(12,2,張三)-->(15,3,王五)
*
* @param finalList 待排序對象的集合
*/
public void sortFinalList(List<User> finalList) {
if (finalList != null) {
Collections.sort(finalList, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
if (o1.getScore() < o2.getScore()) {
return -1;
} else if (o1.getScore() > o2.getScore()) {// 左邊大于右邊,即後面的分數大于前面,按照分數升序排列
return 1;
} else { // 在分數相同的情況下
if (o1.getUserId() < o2.getUserId()) {
return -1;
} else if (o1.getUserId() > o2.getUserId()) {// 按照學号升序排列
return 1;
} else {
return 0;
}
}
}
});
}
}
// user對象
class User {
public int score;
public int userId;
public String userName;
public User() {
}
public User(int score, int userId, String userName) {
super();
this.score = score;
this.userId = userId;
this.userName = userName;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "User [score=" + score + ", userId=" + userId + ", userName=" + userName + "]";
}
}
}
輸出結果如下:
User [score=11, userId=4, userName=趙六]
User [score=12, userId=1, userName=李四]
User [score=12, userId=2, userName=張三]
User [score=15, userId=3, userName=王五]