对于java实体集合排序这里总结了三种方法,第一种是通过原生支持的Comparator做排序,第二种是通过java8的Lambda表达式进行排序,第三种是使用apache-common的工具包进行排序。经测试都能达到想要的效果,相比而言,第三种代码可读性、易用性更强,推荐使用第三种。
第三种排序需要引入Apache-common的beanutils、collections包,maven如下
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
代码
public class TestCollections {
private List<Map<String, Object>> getDataList() {
Map<String, Object> map1 = new HashMap<>(3);
map1.put("id", 2);
map1.put("name", "小明");
Map<String, Object> map2 = new HashMap<>(3);
map2.put("id", 1);
map2.put("name", "小张");
Map<String, Object> map3 = new HashMap<>(3);
map3.put("id", 3);
map3.put("name", "小红");
List<Map<String, Object>> dataList = new ArrayList<>();
dataList.add(map1);
dataList.add(map2);
dataList.add(map3);
return dataList;
}
@Test
public void sort() {
List<Map<String, Object>> dataList = getDataList();
System.out.println("排序前:" + dataList);
// 第一种 Collections 进行降序排序
Collections.sort(dataList, new Comparator<Map>() {
@Override
public int compare(Map o1, Map o2) {
int id1 = Integer.parseInt(o1.get("id").toString());
int id2 = Integer.parseInt(o2.get("id").toString());
//按照id进行降序排列
return id2 - id1;
}
});
System.out.println("Collections降序排序后:" + dataList);
// 第二种 java8 Lambda表达式 进行正序排序
dataList = getDataList();
dataList.sort((Map o1, Map o2) -> {
int id1 = Integer.parseInt(o1.get("id").toString());
int id2 = Integer.parseInt(o2.get("id").toString());
return id1 - id2;
});
System.out.println("Lambda正序排序后:" + dataList);
// 第三种 工具包 进行降序排序
dataList = getDataList();
Comparator mycmp1 = ComparableComparator.getInstance();
//逆序
mycmp1 = ComparatorUtils.reversedComparator(mycmp1);
ArrayList<Object> sortFields = new ArrayList<>();
//主排序(第一排序)
sortFields.add(new BeanComparator("id", mycmp1));
// 创建一个排序链
ComparatorChain multiSort = new ComparatorChain(sortFields);
// 开始真正的排序,按照先主,后副的规则
Collections.sort(dataList, multiSort);
System.out.println("工具包降序排序后:" + dataList);
}
}
运行结果
排序前:[{name=小明, id=2}, {name=小张, id=1}, {name=小红, id=3}]
Collections降序排序后:[{name=小红, id=3}, {name=小明, id=2}, {name=小张, id=1}]
Lambda正序排序后:[{name=小张, id=1}, {name=小明, id=2}, {name=小红, id=3}]
工具包降序排序后:[{name=小红, id=3}, {name=小明, id=2}, {name=小张, id=1}]