1. 程式人生 > >list集合中按照欄位的中文拼音進行排序

list集合中按照欄位的中文拼音進行排序

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());  
        }