JAVA中 List集合如何按某个字段升序或降序排序

第一种:比较标准的jdk的执行比较类的Comparator接口

今天项目中用到了对list中的对象排序,把代码和大家分享下,用工具类collections中的sort方法排序。写一个比较类实现Comparator接口,具体两个类的大小就取决于实现这个接口时里边的逻辑。接下来大家看下例子

以下是比较类的实现

package org.sort;  
  
import java.util.Comparator;  
  
  
public class ComparatorPerson implements Comparator{  
    public int compare(Object arg0, Object arg1) {  
            Person p0=(Person)arg0;  
            Person p1=(Person)arg1;  
              
            if(p0.getAge()<p1.getAge()){  
                return 1;  
            }else if(p0.getAge()==p1.getAge()){  
                if(p0.getName().compareTo(p1.getName())>0){  
                    return 1; 
                }else{
                    return 0;
                }
            }else{  
                return 0;  
            }  
    }  
}  

以下是需要比较的类

package org.sort;  
  
public class Person {  
    private int age;  
    private String name;  
    public int getAge() {  
        return age;  
    }  
    public void setAge(int age) {  
        this.age = age;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public Person(int age, String name) {  
        super();  
        this.age = age;  
        this.name = name;  
    }  
      
} 

以下是测试类

package org.sort;  
  
import java.util.ArrayList;  
import java.util.Collections;  
import java.util.List;  
  
public class Test {  
    public static void main(String[] args) {  
        List<Person> list = new ArrayList<Person>();  
        list.add(new Person(10, "张三"));  
        list.add(new Person(10, "张三丰"));  
        list.add(new Person(11, "张三"));  
        list.add(new Person(11, "张三丰"));  
        for (Person p : list) {  
            System.out.println(p.getAge() + "--排序前---" + p.getName());  
        }  
        Collections.sort(list, new ComparatorPerson());  
        for (Person p : list) {  
            System.out.println(p.getAge() + "---排序后--" + p.getName());  
        }  
        String[] ss = "a||b  ".split("\\|\\|");  
        System.out.println(ss.length);  
        for (String string : ss) {  
            System.out.println(string);  
        }  
    }  
}  

 

 

第二种:JAVA中 List集合如何按某个字段升序或降序排序

public class SortUtil {
    private final static String SORT_ASC = "ASC";
    private final static String SORT_DESC = "DESC";
 
    /**
     * 集合排序
     * @param list 需排序的集合
     * @param property 元素名称
     * @param sort 排序方式
     * @param <T>
     * @return
     */
    public static <T> void sortList(List<T> list, String property, String sort) {
        Collections.sort(list, new Comparator<T>() {
            @Override
            public int compare(T o1, T o2) {
                try {
                    Field field1 = o1.getClass().getDeclaredField(property);
                    field1.setAccessible(true);
                    Integer i1 = Integer.parseInt(getNumber(field1.get(o1).toString()));
 
                    Field field2 = o2.getClass().getDeclaredField(property);
                    field2.setAccessible(true);
                    Integer i2 = Integer.parseInt(getNumber(field2.get(o2).toString()));
 
                    //降序
                    if (sort.toUpperCase().equals(SORT_DESC)) {
                        return i2.compareTo(i1);
                    }
 
                    //升序
                    if (sort.toUpperCase().equals(SORT_ASC)) {
                        return i1.compareTo(i2);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return 0;
            }
        });
    }
 
    /**
     * 提取数字
     *
     * @param str
     * @return
     */
    public static String getNumber(String str) {
        String regEx = "[^0-9]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.replaceAll("").trim();
    }
 
}

 

其他的

List<UserInfo> userInfoList = new ArrayList<UserInfo>();
 
//降序
 userInfoList.sort(Comparator.comparing(UserInfo::getCreateTime).reversed());
 
//升序
userInfoList.sort(Comparator.comparing(UserInfo::getCreateTime));
list = list.stream().sorted(Comparator.comparing(TestSort::getState)).collect(Collectors.toList());

//reversed()倒序排列,默认都是从小到大排序,加上reversed实现倒序
 
list = list.stream().sorted(Comparator.comparing(TestSort::getState)
                .thenComparing(TestSort::getCode).reversed()).collect(Collectors.toList());

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章