list集合中按照字段的中文拼音进行排序

本文是在做项目的时候, 需要对list集合中类的某个属性,进行排序,查找资料时留用:
https://blog.csdn.net/layman1024/article/details/78928761


List 中的ArrayList本身是按照添加顺序排列的,但是有时候想自定义排序方式怎么办呢?

1. List中的Record 实现 Comparable接口并复写compareto方法

public class Record implements Comparable<Record> {  
    private String name;  

    public String getName() {  
        return name;  
    }  

    public void setName(String name) {  
        this.name = name;  
    }  

    @Override  
    public int compareTo(Record o) {  
        return name.compareTo(o.name);  
    }  
}

然后调用sort进行排序

Collections.sort(list);  

2.通过内部类实现排序

package com.datayes.ecoinfo;  

import java.text.Collator;  
import java.util.ArrayList;  
import java.util.Collections;  
import java.util.Comparator;  
import java.util.List;  

public class Test {  
    public static void main(String[] args) {  
        List<String> list = new ArrayList<String>();  
        list.add("你");  
        list.add("好");  
        list.add("啊");  
        Collections.sort(list, new Comparator<String>() {  
            @Override  
            public int compare(String o1, String o2) {  
                Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);  
                return com.compare(o1, o2);  

            }  
        });  

        for (String temp : list) {  
            System.out.println(temp);  
        }  
    }  
}  

jdk自带的Collator包涵的汉字太少了,对一些生僻的姓氏不能进行排序。推荐使用:

import com.ibm.icu.text.Collator;  
<dependency>  
        <groupId>com.ibm.icu</groupId>  
        <artifactId>icu4j</artifactId>  
        <version>57.1</version>  
</dependency> 
//自己测试的     好用  
List<A> list1 = new ArrayList<A>();  
        A a = new A();  
        a.setName("滴滴");  
        A b = new A();  
        b.setName("大哥哥");  
        A c = new A();  
        c.setName("李莲英");  
        A d = new A();  
        d.setName("杨坤");  
        A e = new A();  
        e.setName("李连杰");  
        A f = new A();  
        f.setName("成员");  
        A g = new A();  
        g.setName("赵润发");  
        A h = new A();  
        h.setName("欧阳娜娜");  
        list1.add(a);  
        list1.add(b);  
        list1.add(c);  
        list1.add(d);  
        list1.add(e);  
        list1.add(f);  
        list1.add(g);  
        list1.add(h);  
        //开始自定义比较器
        Collections.sort(list1, new Comparator<A>() {  
            @Override  
            public int compare(A o1, A o2) {  
               //  重要部分
                Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);  
                return com.compare(o1.getName(), o2.getName());  

            }  
        });  
        for (int i = 0; i < list1.size(); i++) {  
            System.out.println(list1.get(i).getName());  
        }  

猜你喜欢

转载自blog.csdn.net/weixin_39297312/article/details/80182596