47

Recipeを実装するオブジェクトを取得しましたComparable<Recipe>:

public int compareTo(Recipe otherRecipe) {
    return this.inputRecipeName.compareTo(otherRecipe.inputRecipeName);
}

私はそれを行ったのでList、次の方法でアルファベット順に並べ替えることができます:

public static Collection<Recipe> getRecipes(){
    List<Recipe> recipes = new ArrayList<Recipe>(RECIPE_MAP.values());
    Collections.sort(recipes);
    return recipes;
}

しかし、今、別の方法でそれを呼び出すことができますgetRecipesSort().IDを含む変数を比較して、同じリストを数値的に並べ替えたいと思います。さらに悪いことに、ID フィールドの型はStringです。

Collections.sort() を使用して Java でソートを実行するにはどうすればよいですか?

4

5 に答える 5

7

コンストラクターで比較モードを受け入れるコンパレーターを作成し、要件に基づいてさまざまなシナリオにさまざまなモードを渡します

public class RecipeComparator implements Comparator<Recipe> {

public static final int COMPARE_BY_ID = 0;
public static final int COMPARE_BY_NAME = 1;

private int compare_mode = COMPARE_BY_NAME;

public RecipeComparator() {
}

public RecipeComparator(int compare_mode) {
    this.compare_mode = compare_mode;
}

@Override
public int compare(Recipe o1, Recipe o2) {
    switch (compare_mode) {
    case COMPARE_BY_ID:
        return o1.getId().compareTo(o2.getId());
    default:
        return o1.getInputRecipeName().compareTo(o2.getInputRecipeName());
    }
}

}

実際には、それらを個別に処理する必要がある数値については、以下を確認してください

public static void main(String[] args) {
    String string1 = "1";
    String string2 = "2";
    String string11 = "11";

    System.out.println(string1.compareTo(string2)); 
    System.out.println(string2.compareTo(string11));// expected -1 returns 1
   // to compare numbers you actually need to do something like this

    int number2 = Integer.valueOf(string1);
    int number11 = Integer.valueOf(string11);

    int compareTo = number2 > number11 ? 1 : (number2 < number11 ? -1 : 0) ;
    System.out.println(compareTo);// prints -1
}
于 2013-05-07T17:58:35.373 に答える
3

Comparator自然な順序以外でソートしたい場合は a を受け付けるメソッドを使用してください。

Collections.sort(リスト、コンパレータ)

于 2013-05-07T17:34:28.170 に答える