Java Collection.sort()List順序のデフォルト方法とカスタム方法を実現する。


1.javaが提供するデフォルトリストのソート方法
主要コード:

List<String> list = new ArrayList();list.add("   ");
list.add("  ");
list.add("  ");
list.add("  ");
list.add("  ");
//  
Collections.sort(list,Collator.getInstance(java.util.Locale.CHINA));//  :               ,              
for(int i=0;i<list.size();i++)
{
 System.out.print(list.get(i));
}
System.out.println("");
//  
Collections.reverse(list);//        ,           
for(int i=0;i<list.size();i++)
{
  System.out.print(list.get(i));
}
出力結果:
李明劉布迪劉媛媛媛媛王碩
王碩劉媛媛媛劉迪劉布李明
2.カスタム並べ替え規則:
一つ目はmodel類でComprableインターフェースを実現し、書き換えint compreTo(Object o)方法です。
            モデルクラス:

public class StudentDTO implements Comparable
{
 private String name;
 private int age;
public String getName()
{
 return name;
}
public void setName(String name)
{
  this.name = name;
}
public ObjType getType()
{
 return type;
}
public void setAge(int age)
{
  this.age= age;
}
@Override
public int compareTo(Object o)
{
  StudentDTO sdto = (StudentDTO)o;
  int otherAge = sdto.getAge();
  // note: enum-type's comparation depend on types' list order of enum method
  // so, if compared property is enum-type ,then its comparationfollow ObjEnum.objType order
  return this.age.compareTo(otherAge);
}
}
      :   
public static void main(String[] args)
{
  List<StudentDTO> studentList = new ArrayList();
  StudentDTO s1 = new StudentDTO ();
  s.setName("yuanyuan");
  s.setAge(22);
  studentList.add(s1);
     StudentDTO s1 = new StudentDTO ();
     s.setName("lily");
     s.setAge(23);
     studentList.add(s2);
     Collections.sort(studentList); //  age   22,23,
     Collections.reverse(studentList); //  age   23,22 
}
二つ目はコンパレータ類がCompratorインターフェースを実現し、int compre(Object o 1,Object o 2)を書き換える方法です。
           モデルクラス:          

public class StudentDTO implements Comparable
{
  private String name;
  private int age;
  public String getName()
  {
   return name;
  }
  public void setName(String name)
 {
   this.name = name;
  }
  public ObjType getType()
  {
   return type;
  }
  public void setAge(int age)
  {
   this.age= age;
  }
} 
       :
class MyCompartor implements Comparator
{
  @Override
  public int compare(Object o1, Object o2)
 {
   StudentDTO sdto1= (StudentDTO )o1;
   StudentDTO sdto2= (StudentDTO )o2;
   return sdto1.getAge.compareTo(stdo2.getAge())
 }
}
      :
public static void main(String[] args)
{
  List<StudentDTO> studentList = new ArrayList();
  StudentDTO s1 = new StudentDTO ();
  s.setName("yuanyuan");
  s.setAge(22);
  studentList.add(s1);
  StudentDTO s1 = new StudentDTO ();
  s.setName("lily");
  s.setAge(23);
  studentList.add(s2);
  MyComparetor mc = new MyComparetor();
  Collections.sort(studentList,mc);  //  age   22,23,
  Collections.reverse(studentList,mc); //  age   23,22 
}
注記:
1.配列の並べ替え方法は以下の通りです。

String[] names = {"  ", "  ", "  ", "  ", "  "}; 
Arrays.sort(names, com.ibm.icu.text.Collator.getInstance(com.ibm.icu.util.ULocale.SIMPLIFIED_CHINESE));//  ; 
System.out.println(Arrays.toString(names));  
2.漢字の並べ替えについて:ICU 4 Jを使ってみてもいい結果が得られます。特に姓がいくつかの見慣れない字の場合、
comp.ibm.icu.text.C.ollatorをjava.text.C.ollatorに置き換え、comp.ibm.icu.util.ULolocal eをjava.util.Localeに置き換える。
3.エニュメレーションの種類についてのenum 1.com mpare To(enum 2)は、エニュメレート・タイプの値が定義されている時の先着順で比較され、後ほど大きくなります。
値のアルファベット順に比べるのではありません。
 以上述べたのは小编でご绍介したJava Collection.sort()のList顺位を実现するデフォルトの方法とカスタムの方法です。皆さんのために役に立つことを望んでいます。ここでも私たちのサイトを応援してくれてありがとうございます。