排序List集合

这两天写代码过程中遇到一个需求,需要按照某个字段排序List集合,自己实现了一半,发现网上有个更好的版本,就采用了这个,记录下来。

使用这个工具类要注意一个就是 如果你按照age 字段排序,那么age字段值不能为空,如果值为空会报异常,那么解决这个办法就是将空值的赋值。

 1 import java.lang.reflect.Method;
 2
 3 import java.util.Collections;
 4 import java.util.Comparator;
 5 import java.util.List;
 6
 7 /**
 8  *
 9  * @ClassName:  ListSortUtil
10  * @Description:TODO(list集合排序 按照字段 升序或降序)
11  * @author: yh
12  * @date:   2017年2月9日 下午4:05:36
13  * 注意:要排序的字段值不能为空
14  * @param <T>
15  */
16 public class ListSortUtil<T> {
17     /**
18      * @param targetList 目标排序List
19      * @param sortField 排序字段(实体类属性名)
20      * @param sortMode 排序方式(asc or  desc)
21      */
22     @SuppressWarnings({ "unchecked", "rawtypes" })
23     public void sort(List<T> targetList, final String sortField, final String sortMode) {
24
25         Collections.sort(targetList, new Comparator() {
26             public int compare(Object obj1, Object obj2) {
27                 int retVal = 0;
28                 try {
29
30                     String newStr=sortField.substring(0, 1).toUpperCase()+sortField.replaceFirst("\\w","");
31                     String methodStr="get"+newStr;
32
33                     Method method1 = ((T)obj1).getClass().getMethod(methodStr, null);
34                     Method method2 = ((T)obj2).getClass().getMethod(methodStr, null);
35                     if (sortMode != null && "desc".equals(sortMode)) {
36                         retVal = method2.invoke(((T) obj2), null).toString().compareTo(method1.invoke(((T) obj1), null).toString());  // 倒序
37                     } else {
38                         retVal = method1.invoke(((T) obj1), null).toString().compareTo(method2.invoke(((T) obj2), null).toString());  // 正序
39                     }
40                 } catch (Exception e) {
41                     throw new RuntimeException();
42                 }
43                 return retVal;
44             }
45         });
46     }
47
48 } 
时间: 2024-10-27 07:29:57

排序List集合的相关文章

通过Java排序List集合的元素的几种方法

用Java工具类Collections的sort()方法,对List集合元素进行排序. Collections提供两种排序方法: 一.Collections.sort(List<T> list); 此方法需要泛型T这个Bean实现Comparable<T>接口,并且实现compareTo()方法排序: 二.Collections.sort(List<T> list, Comparator<? super T> c); 此方法,在泛型T这个Bean没有实现Co

《head first python》——理解数据:列表排序与集合

1.sort()与sorted()--数据排序 sort() 对数据原地排序,sorted()创建原地副本.用法是: obj.sort(); obj2 = sorted(obj1) <pre name="code" class="python">>>> a = [2,7,5,1,9] >>> b = sort(a) Traceback (most recent call last): File "<py

数组转换为集合进行排序,集合、数组自定义排序

数组转换成集合,sort方法进行排序 Integer[] nums = { 23, 16, 12, 58, 11 }; // 集合转换为数组 List<Integer> numList = Arrays.asList(nums); Collections.sort(numList); // 排序之后 for (Integer num : numList) { System.out.print(num + "\t"); } 自定义排序,实现倒序排列--内部类 Integer[

各种排序代码集合笔记

#include<stdio.h> //直接插入排序 void InsertSort(int *datatemp,int n){ int *data = new int[n]; for(int i=0;i<n;i++){ data[i]=datatemp[i]; } int temp,j; for(int i=2;i<n;i++){ temp = data[i]; if(data[i]<data[i-1]){ j = i-1; while(data[j]>temp){

常用排序算法集合-C实现

之前熟悉C的时候写着玩的,就当做笔记用吧: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define MAX 8 void print_r(int *arr,int len); static void usage(void) { printf("-s selection sort\n" "-b show unsorted st

ArrayList元素的排序 java 集合

1.新建项目,新建Man类,添加属性 2.在代码编辑区域右键,选中source,自动生成setter,getter方法,以及构造函数(类似操作,选中generate constructor using field...) 3.勾选相应的属性,确认即可,很方便. 结果如下图: Man.java代码如下: 1 public class Man { 2 3 private String name; 4 public String getName() { 5 return name; 6 } 7 pub

排序大集合java

今日面试被问到排序问题,发现自己的不足,特来查漏补缺: 首先是各大排序算法的总结表 排序算法大合集  排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 冒泡排序 Ο(n2) Ο(n) Ο(n2) Ο(1)  稳定 选择排序 Ο(n2) Ο(n2) Ο(n2) Ο(1)  不稳定 插入排序 Ο(n2) Ο(n) Ο(n2) Ο(1)  稳定 希尔排序 Ο(nlogn) Ο(nlog2n) Ο(nlog2n) Ο(1)  不稳定 归并排序 Ο(nlogn) Ο(nlogn) Ο(nl

误用 Kotlin 中的 sortedWith() 方法排序,集合没有变化

时间:2019年8月4日14:17:06问题描述:看下边的小例子: data class Man(val name: String, val age: Int, val type: Int) fun main(args: Array<String>) { val list = mutableListOf<Man>() list.add(Man("wzc", 31,2)) list.add(Man("wzj", 32,1)) list.add(

Stream排序Map集合

最近小编自己一个人在负责一个项目的后台开发,其中有一部分是统计相关的功能,所以需要一些排序或者分组的操作,之前这种操作小编觉得还是比较麻烦的,虽热有一些现成的工具类,但是工具类的写法也是比较复杂的,但是如果使用java8 stream流的话就比较简单了,并且代码量会大大的减少,下面总结几个对map的操作. 1.map 根据value排序 Map<String,BigDecimal> map =new HashMap<>(); map.put("one", 0.0