collectionでsort()メソッドlistコレクションのソート
4852 ワード
1つ目はlistのオブジェクト実装Comparableインタフェースです.以下のようにします.
テスト:
出力結果は以下のa b
2つ目の方法はCollectionsによる.sortリロード方法は、例えば、
プライマリクラスには、次のように書けばいいです.
出力結果は、a bの前者のコード構造は簡単であるが、固定された属性に基づいてソートするしかなく、後者は柔軟で、一時的にソート項目を指定することができるが、コードは簡潔ではない.
複数フィールドの場合:Collections.sort(list,new Comparator(){public int compare(User arg 0,User arg 1){//初めて専門int i=arg 0.getOrder()/compareTo(arg 1.getOrder();
//同じ専攻の場合は2回目の比較if(i=0){//2回目の比較int j=arg 0.getXXX().compareTo(arg 1.getXXX()//同じ学制の場合は年齢順if(j=0)に戻る{ return arg0.getCCC().compareTo(arg1.getCCC()); } return j; } return i; } });
以下は別の例package testである.
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator;
public class ArrayListTest { public static void main(String[] args) { ArrayList arrayList = new ArrayList() ; arrayList.add(new Exmployee("zengqiang",new Integer(5000))) ; arrayList.add(new Exmployee("zengmin",new Integer(4000))) ; arrayList.add(new Exmployee("liuxiaojuan",new Integer(4200))) ; arrayList.add(new Exmployee("giuming",new Integer(2200))) ; Collections.sort(arrayList,new Comparator(){public int comparare(Exmployee arg 0,Exmployee arg 1){returnarg 1.getSalary()−arg 0.getSalary();//////////////////////////////////////////returnarg 0.getSalary()−arg 1.getSalary();工資降順///returnarg 0.getName()/.compareTo(arg 1.getName();名前昇順}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}); for(Exmployee e:arrayList) System.out.println(e.getName()+"'s salary is "+e.getSalary()) ; }
}
class Exmployee { public Exmployee(String name, int salary) { this.name = name ; this.salary = salary ; }
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getSalary() { return salary; }
public void setSalary(int salary) { this.salary = salary; }
private int salary; }
/**
* order User
*/
public class User implements Comparable<User>{
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public int compareTo(User arg0) {
return this.getOrder().compareTo(arg0.getOrder());
}
}
テスト:
public class Test{
public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
List<User> list = new ArrayList<User>();
// add user2 add user1
list.add(user2);
list.add(user1);
Collections.sort(list);
for(User u : list){
System.out.println(u.getName());
}
}
}
出力結果は以下のa b
2つ目の方法はCollectionsによる.sortリロード方法は、例えば、
/**
* order User
*/
public class User { // Comparable
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
}
プライマリクラスには、次のように書けばいいです.
public class Test{
public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
List<User> list = new ArrayList<User>();
list.add(user2);
list.add(user1);
Collections.sort(list,new Comparator<User>(){
public int compare(User arg0, User arg1) {
return arg0.getOrder().compareTo(arg1.getOrder());
}
});
for(User u : list){
System.out.println(u.getName());
}
}
}
出力結果は、a bの前者のコード構造は簡単であるが、固定された属性に基づいてソートするしかなく、後者は柔軟で、一時的にソート項目を指定することができるが、コードは簡潔ではない.
複数フィールドの場合:Collections.sort(list,new Comparator
//同じ専攻の場合は2回目の比較if(i=0){//2回目の比較int j=arg 0.getXXX().compareTo(arg 1.getXXX()//同じ学制の場合は年齢順if(j=0)に戻る{ return arg0.getCCC().compareTo(arg1.getCCC()); } return j; } return i; } });
以下は別の例package testである.
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator;
public class ArrayListTest { public static void main(String[] args) { ArrayList
}
class Exmployee { public Exmployee(String name, int salary) { this.name = name ; this.salary = salary ; }
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getSalary() { return salary; }
public void setSalary(int salary) { this.salary = salary; }
private int salary; }