2016-07-24 2 views
0

私は単純なペアクラスを持ち、それらの配列を作成しました。Javaの最初の値でペアの配列を並べ替える

private static class Pair 
{ 
    private String l; 
    private String e; 
} 

それはのようなペアの配列ソートすることが可能ですかと思いまして:ペアでちょうど最初の要素によって (a, de), (g, e), (dde, gh) を。結果を作成する:(a, de), (dde, gh), (g,e)私はこれがC++で可能だと知っていますが、私はJavaを初めて使い、解決のために何時間もオンラインで検索しています。私はあなたがComparatorを使うことができると読んだことがありますが、それが実際にどのように動作するかまだ分かりません。どんな提案も非常に高く評価されます。ありがとう!一般的なアプローチは次のようになり

Arrays.sort(pairArray, new Comparator<Pair>() { 
    @Override 
    public int compare(Pair p1, Pair p2) { 
     return p1.getL().compareTo(p2.getL()); 
    } 
}); 

答えて

1

答え、もう1つのオプションがあります:Pairを実装するComparableインタフェース:

private static class Pair implements Comparable<Pair> 
{ 
    private String l; 
    private String e; 

    int compareTo(Pair that) { 
     return this.l.compareTo(that.l); 
    } 
} 

List<Pair> pairList; 
Collections.sort(pairList); 

これらの2つのオプションの選択はあなたがPairを変更するかどうかによって異なります(ComparableComparatorにはない、それを必要とする)、そしてあなたは異なる可能な順序を持つことができるかどうか(Comparableは、唯一の順序付けを使用することができますComparatorでは、希望通りに多くの順序を定義できます)。もちろん、アプローチを組み合わせて、Comparableインターフェイスの実装でデフォルトの順序を実装することもできますが、Comparatorで追加の順序を使用することもできます。

+0

申し訳ありませんa1.getL()。compareToIgnoreCase(a2.getL());説明してください。部? getLは何をするのですか?大文字で始まることがわかったらcompareToIgnoreCaseを入れなければなりませんか? – Jon

+1

'getL()'は 'Pair'で実装しなければならないものです。フィールド 'l'と' r'はプライベートなので、それらのゲッターが必要です。通常、 'l'の値を返すだけのパブリックメソッドです。 –

+0

さて、オブジェクトa1とオブジェクトa2をどうやって置く必要がありますか?申し訳ありませんが、それはばかな質問です。これは文字通り私の最初のJavaプログラムです。 – Jon

2

Arrays.sort(myArray, new Comparator<Pair>() { 
    @Override 
    public int compare(Pair p1, Pair p2) { 
     return p1.l.compareTo(p2.l); 
    } 
}); 

のJava 8のラムダとそれが簡単になります:ティムBiegeleisenのに加えて

Arrays.sort(myArray, (p1, p2) -> p1.l.compareTo(p2.l)); 
+0

この回答は、 'l'フィールドが公にアクセス可能であることを前提としています。 –

+1

純粋なOOPのアプローチでは、クラスの内部を隠す必要があり、ゲッターを導入して使用するのはもっと慣れていると私は全く同意します。しかし、この特定の例では、 'Pair'はネストされたクラス(' private static'と定義されています)であることが明らかです。したがって、呼び出し元がプライベートフィールドにアクセスできると想定するのは安全です。そうでなければ、 'ペア 'をインスタンス化することさえできます。 –

1

インラインカスタムコンパレータを使用して

+1

Upvoted。 'compareTo'をオーバーライドする可能性のある欠点の1つは、そのようなメソッドが1つしかないということです。 '' Pair''を別の方法でソートする必要がある場合、カスタムコンパレータでこれを行うことができます。そして、任意の数の比較器を定義することができる。 –

関連する問題