1.定义实体类
1.User
package entity;
/**
* @Date 2021/12/10 14:36
* @Created by wys
*/
public class User {
private Integer userId;
private String userName;
private String password;
private String score;
public User(Integer userId, String userName, String password, String score) {
this.userId = userId;
this.userName = userName;
this.password = password;
this.score = score;
}
public User(Integer userId, String userName, String password) {
this.userId = userId;
this.userName = userName;
this.password = password;
}
public User() {
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
", score='" + score + '\'' +
'}';
}
}
2.Tester
package entity;
/**
* @Date 2021/12/16 16:40
* @Created by wys
*/
public class Tester {
private Integer testId;
private String money;
public Integer getTestId() {
return testId;
}
public void setTestId(Integer testId) {
this.testId = testId;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
@Override
public String toString() {
return "Tester{" +
"testId=" + testId +
", money='" + money + '\'' +
'}';
}
public Tester(Integer testId, String money) {
this.testId = testId;
this.money = money;
}
public Tester() {
}
public Tester(Integer testId) {
this.testId = testId;
}
}
2.main方法
package anydemo;
import entity.Tester;
import entity.User;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/**
* @Date 2021/12/16 15:29
* @Created by wys
*/
public class ListSortDemo {
public static void main(String[] args) {
User u1 = new User(1, "1", "1", "111");
User u2 = new User(2, "1", "1", "1111");
User u3 = new User(3, "1", "1", "112");
User u4 = new User(4, "1", "1", "1");
User u5 = new User(5, "1", "1");
User u6 = new User(6, "1", "1", "");
Tester t1 = new Tester(1, "2000");
Tester t2 = new Tester(2, "1111112");
Tester t3 = new Tester(3);
Tester t4 = new Tester(4);
Tester t5 = new Tester(5, "2023");
Tester t6 = new Tester(6, "");
List<User> list = new ArrayList<>();
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
list.add(u5);
list.add(u6);
List<Tester> testerList = new ArrayList<>();
testerList.add(t1);
testerList.add(t2);
testerList.add(t3);
testerList.add(t4);
testerList.add(t5);
testerList.add(t6);
System.out.println(Arrays.toString(list.toArray()));
listSort(list, "score");
System.out.println(Arrays.toString(list.toArray()));
System.out.println(Arrays.toString(testerList.toArray()));
listSort(testerList, "money");
System.out.println(Arrays.toString(testerList.toArray()));
}
public static <V> void listSort(List<V> vList, String keyName) {
// 传入不同list进行相同逻辑的排序,注意判空(忽略)
vList.sort(((o1, o2) -> Double.compare(Double.parseDouble(Objects.requireNonNull(getValue(o2, keyName))),Double.parseDouble(Objects.requireNonNull(getValue(o1, keyName))))));
}
/**
* 反射获取bean中的值
* @return
*/
public static String getValue(Object obj, String keyName) {
String value;
for (Field fieldElem : obj.getClass().getDeclaredFields()) {
fieldElem.setAccessible(true);
if (fieldElem.getName().equals(keyName)) {
Method method = null;
try {
// 获取get方法
method = obj.getClass().getMethod("get" + change(keyName), null);
value = (String) method.invoke(obj);
// 如果为空,直接置最小值
return isNotEmpty(value) ? value : String.valueOf(Integer.MIN_VALUE);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
return String.valueOf(Integer.MIN_VALUE);
}
/**
* @param src 源字符串
* @return 字符串,将src的第一个字母转换为大写,src为空时返回null
*/
public static String change(String src) {
if (src != null) {
StringBuilder sb = new StringBuilder(src);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
return sb.toString();
} else {
return null;
}
}
public static boolean isNotEmpty (String s) {
if (s != null && !s.equals("")) {
return true;
}
return false;
}
}