如題
有一個List<People> 集合
people物件有如下五個屬性
姓名 年齡 職業 電話 地址
有這樣一個集合
姓名1 年齡1 職業1 電話1 地址1
姓名2 年齡2 電話2 地址2
姓名3 年齡3 職業3
姓名4 職業4 電話4 地址4
姓名5 年齡5
姓名6 年齡6 職業6 地址6
需求是按照物件的欄位有值個數進行排序
欄位有值多的在前面 少的在后面
欄位有值個數一樣的隨機排
排序后是這樣的
姓名1 年齡1 職業1 電話1 地址1
姓名2 年齡2 電話2 地址2
姓名6 年齡6 職業6 地址6
姓名4 職業4 電話4 地址4
姓名3 年齡3 職業3
姓名5 年齡5
請問這個有什么方法實作或者思路?多謝
uj5u.com熱心網友回復:
重寫compareTo方法,如果可以在People物件上加上一個表示幾個屬性值有值的變數,就根據這個判斷,如果不可以,就在方法內依次判斷兩個物件的各個屬性,如果大的放前面,其實根本都是一樣的uj5u.com熱心網友回復:
T.R(age=1, career=null, phone=null, address=1)T.R(age=2, career=null, phone=null, address=2)
T.R(age=3, career=3, phone=null, address=3)
T.R(age=null, career=null, phone=null, address=4)
===================
T.R(age=3, career=3, phone=null, address=3)
T.R(age=1, career=null, phone=null, address=1)
T.R(age=2, career=null, phone=null, address=2)
T.R(age=null, career=null, phone=null, address=4)
for (int i = 0; i < list.size() - 1; i++) {
for (int j = 0; j < list.size() - i - 1; j++) {
if(checkObjFieldIsNull(list.get(j)) > checkObjFieldIsNull(list.get(j + 1))) {
R r = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, r);
}
}
}
public static int checkObjFieldIsNull(Object obj) throws IllegalAccessException {
int num = 0;
for (Field f : obj.getClass().getDeclaredFields()) {
f.setAccessible(true);
if(f.get(obj) == null) {
num++;
}
}
return num;
}
uj5u.com熱心網友回復:
import java.lang.reflect.Field;
uj5u.com熱心網友回復:
給people加一個屬性count,統計出有值欄位放在這里,然后針對這個欄位排序uj5u.com熱心網友回復:
二樓正解,重寫compareTo方法比較方便uj5u.com熱心網友回復:
物體類里寫個方法計算屬性非空個數就行了@Data
public class People {
private String name;
private Integer age;
private Integer height;
public People(String name, Integer age,Integer height) {
this.name = name;
this.age = age;
this.height=height;
}
private int getCharacter() {
return (int) Arrays.stream(this.getClass().getDeclaredFields())
.filter(a -> {
try {
return a.get(this) != null;
} catch (IllegalAccessException e) {
}
return false;
}
).count();
}
public static void main(String[] args) {
People p1 = new People("小花",null,null);
People p2 = new People("李四", 22,175);
People p3 = new People("張三", 21,null);
List<People> list = Lists.newArrayList(p1,p2,p3);
list.sort(Comparator.comparing(People::getCharacter));
list.forEach(System.out::println);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/183047.html
標籤:Java EE
上一篇:請問 在 eclipse的 jsp檔案編輯界面 看不到 表明 標簽之間對應的連線,如何調出來
下一篇:HashMap理解
