list集合中按照欄位的中文拼音進行排序
阿新 • • 發佈:2019-01-25
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());
}