业务场景:
今天有个小需求,多个实体类的集合合并以后,按照实体类的某个属性(时间)进行排序,自己写的方法太蠢且复杂了,所以在网上找了方法,感觉还是比较简洁有效的,现在记录下来以备后用。
package simpletest;
/**
* 测试实体类
* @author YuanReny1
*
*/
public class User {
private String name;
private String birthDay;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBirthDay() {
return birthDay;
}
public void setBirthDay(String birthDay) {
this.birthDay = birthDay;
}
public User(String name, String birthDay) {
super();
this.name = name;
this.birthDay = birthDay;
}
}
package simpletest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;
public class ListSortTest {
/**
* bean的集合按照指定bean的字段排序
* @param list 要排序的集合
* @param filedName 字段名称
* @param ascFlag 是否升序
*/
public static void sort(List list, String filedName, boolean ascFlag) {
if (list.size() == 0 || filedName.equals("")) {
return;
}
Comparator<?> cmp = ComparableComparator.getInstance();
if (ascFlag) {
cmp = ComparatorUtils.nullLowComparator(cmp);
} else {
cmp = ComparatorUtils.reversedComparator(cmp);
}
Collections.sort(list, new BeanComparator(filedName, cmp));
}
static void test() {
List<User> list = new ArrayList<>();
list.add(new User("张三", "2020-02-01 16:00:01"));
list.add(new User("李四", "2020-02-03 08:40:32"));
list.add(new User("王五", "2020-02-01 09:33:32"));
sort(list, "birthDay", false);
for(User u : list) {
System.out.println(u.getName() + "-> " + u.getBirthDay());
}
}
public static void main(String[] args) {
test();
}
}
预期结果:User的集合按照birthDay降序排序
执行结果:
OK