HiiHahWIKI - making some notes for... -
Java:Collections.sort、Compartorのサンプル
をテンプレートにして作成
開始行:
*Java:Collections.sort、Compartorのサンプル [#x49abbc3]
例えば、Stringのリストは以下のようにソートできます。
■コード
List<String> list = new ArrayList<String>();
list.add("yosida");
list.add("suzuki");
list.add("saitou");
Collections.sort(list);
for (String s : list) System.out.println(s);
■出力
saitou
suzuki
yosida
独自オブジェクトをソートしたい場合は、Comparatorクラスを...
Collections.sortメソッドに渡すとソートしてくれます。
サンプルコードは以下の通りです。
■CustomSortSample.java
package sample;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CustomSortSample {
/**
* @param args
*/
public static void main(String[] args) {
new CustomSortSample().runCoparatorSortSample();
}
public void runCoparatorSortSample(){
List<TargetBean> list = new ArrayList<TargetBean>();
// リストにソート対象を詰める
list.add(new TargetBean().setName("suzuki").setAge(36));
list.add(new TargetBean().setName("saitou").setAge(19));
list.add(new TargetBean().setName("shimada").setAge(26...
list.add(new TargetBean().setName("torii").setAge(79));
list.add(new TargetBean().setName("yasuda").setAge(52));
list.add(new TargetBean().setName("morimoto").setAge(2...
list.add(new TargetBean().setName("shimada").setAge(26...
// ソート前に出力
System.out.println("###ソート前###");
for (TargetBean i : list) {
System.out.println(i);
}
// Conparatorを使ってソートを実行
Collections.sort(list, new TargetBeanComparator());
// ソート結果を出力
System.out.println("###ソート後###");
for (TargetBean i : list) {
System.out.println(i);
}
}
/**
* ソートしたいクラス
* 名前と年齢のBean
* 面倒だったので、setterでthisをreturnしている。
* */
private class TargetBean{
private String name = null;
private int age = 0;
public String getName() {
return name;
}
public TargetBean setName(String name) {
this.name = name;
return this;
}
public int getAge() {
return age;
}
public TargetBean setAge(int age) {
this.age = age;
return this;
}
public String toString(){
return "name: " + this.name + "\tage: " + this.age;
}
}
/**
* Comparatorクラス
* TargetBeanクラスのageを比較する
* */
public class TargetBeanComparator implements Comparator...
// aとbを比較して、aの方が小さい場合は負の数を、等しい...
// 大きい場合は正の数を返却する
public int compare(TargetBean a, TargetBean b){
// 年齢で比較して、aの方が大きい場合は正の数を返却する
if (a.getAge() > b.getAge()){
return 1;
} else if (a.getAge() == b.getAge()){
// 年齢が等しい場合、名前で比較し、aの方が後ろの場合に
// 正の数を返却する。
if (a.getName().compareTo(b.getName()) > 0){
return 1;
// aの方が前の場合に正の数を返却する。
} else if (a.getName().compareTo(b.getName()) < 0){
return -1;
// 名前も等しい場合は、0を返却する。
} else {
return 0;
}
}
// それ以外の場合は、aの方が前として扱い、負の数を返...
return -1;
}
}
}
■出力
###ソート前###
name: suzuki age: 36
name: saitou age: 19
name: shimada age: 26
name: torii age: 79
name: yasuda age: 52
name: morimoto age: 26
name: shimada age: 26
###ソート後###
name: saitou age: 19
name: morimoto age: 26
name: shimada age: 26
name: shimada age: 26
name: suzuki age: 36
name: yasuda age: 52
name: torii age: 79
なるほど、簡単ですなw
終了行:
*Java:Collections.sort、Compartorのサンプル [#x49abbc3]
例えば、Stringのリストは以下のようにソートできます。
■コード
List<String> list = new ArrayList<String>();
list.add("yosida");
list.add("suzuki");
list.add("saitou");
Collections.sort(list);
for (String s : list) System.out.println(s);
■出力
saitou
suzuki
yosida
独自オブジェクトをソートしたい場合は、Comparatorクラスを...
Collections.sortメソッドに渡すとソートしてくれます。
サンプルコードは以下の通りです。
■CustomSortSample.java
package sample;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CustomSortSample {
/**
* @param args
*/
public static void main(String[] args) {
new CustomSortSample().runCoparatorSortSample();
}
public void runCoparatorSortSample(){
List<TargetBean> list = new ArrayList<TargetBean>();
// リストにソート対象を詰める
list.add(new TargetBean().setName("suzuki").setAge(36));
list.add(new TargetBean().setName("saitou").setAge(19));
list.add(new TargetBean().setName("shimada").setAge(26...
list.add(new TargetBean().setName("torii").setAge(79));
list.add(new TargetBean().setName("yasuda").setAge(52));
list.add(new TargetBean().setName("morimoto").setAge(2...
list.add(new TargetBean().setName("shimada").setAge(26...
// ソート前に出力
System.out.println("###ソート前###");
for (TargetBean i : list) {
System.out.println(i);
}
// Conparatorを使ってソートを実行
Collections.sort(list, new TargetBeanComparator());
// ソート結果を出力
System.out.println("###ソート後###");
for (TargetBean i : list) {
System.out.println(i);
}
}
/**
* ソートしたいクラス
* 名前と年齢のBean
* 面倒だったので、setterでthisをreturnしている。
* */
private class TargetBean{
private String name = null;
private int age = 0;
public String getName() {
return name;
}
public TargetBean setName(String name) {
this.name = name;
return this;
}
public int getAge() {
return age;
}
public TargetBean setAge(int age) {
this.age = age;
return this;
}
public String toString(){
return "name: " + this.name + "\tage: " + this.age;
}
}
/**
* Comparatorクラス
* TargetBeanクラスのageを比較する
* */
public class TargetBeanComparator implements Comparator...
// aとbを比較して、aの方が小さい場合は負の数を、等しい...
// 大きい場合は正の数を返却する
public int compare(TargetBean a, TargetBean b){
// 年齢で比較して、aの方が大きい場合は正の数を返却する
if (a.getAge() > b.getAge()){
return 1;
} else if (a.getAge() == b.getAge()){
// 年齢が等しい場合、名前で比較し、aの方が後ろの場合に
// 正の数を返却する。
if (a.getName().compareTo(b.getName()) > 0){
return 1;
// aの方が前の場合に正の数を返却する。
} else if (a.getName().compareTo(b.getName()) < 0){
return -1;
// 名前も等しい場合は、0を返却する。
} else {
return 0;
}
}
// それ以外の場合は、aの方が前として扱い、負の数を返...
return -1;
}
}
}
■出力
###ソート前###
name: suzuki age: 36
name: saitou age: 19
name: shimada age: 26
name: torii age: 79
name: yasuda age: 52
name: morimoto age: 26
name: shimada age: 26
###ソート後###
name: saitou age: 19
name: morimoto age: 26
name: shimada age: 26
name: shimada age: 26
name: suzuki age: 36
name: yasuda age: 52
name: torii age: 79
なるほど、簡単ですなw
ページ名: