2017-03-18 8 views
-2

私はjavaを初めて利用しています。私は最初の文字に基づいて与えられたペアをソートするコードを書いています。私はCollections.sort()を使用してペアをソートしていますが、どういうわけかソートされていません。私は問題の原因を突き止めることができません。以下のコードを確認してください。ありがとう。なぜCollections.sort()が機能していないのですか?

package main.java.practice; 

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 

public class StringChain { 

    public static void main(String[] args) { 

    List<Pair> arr = new ArrayList<>(); 
    arr.add(new Pair('i', 'a')); 
    arr.add(new Pair('a', 'f')); 
    arr.add(new Pair('g', 'h')); 
    arr.add(new Pair('f', 'g')); 
    arr.add(new Pair('z', 'i')); 

    Collections.sort(arr, new Comparator<Pair>() { 
     @Override 
     public int compare(Pair o1, Pair o2) { 
      if (o1.a < o2.b) return 1; 
      else return 0; 
     } 
    }); 

    // Expected output should be 
    // a f 
    // f g 
    // g h 
    // i a 
    // z i 
    for(Pair x : arr) { 
     System.out.println(x.a + " " + x.b); 
    } 
    // Actual output 
    // i a 
    // a f 
    // g h 
    // f g 
    // z i 

    } 

} 

class Pair { 

    char a; 
    char b; 

    Pair() {}; 
    Pair(char a, char b) { 
     this.a = a; 
     this.b = b; 
    } 
} 
+0

あなたは 'リターンを-1'不足している必要がありますように、コードが機能しない理由である1を省略しています。 –

+0

'Pair'オブジェクトを' Comparable'インターフェースで実装し、 'compareTo(Pair anotherPair)'メソッドをオーバーライドする必要があります。 – t4dohx

+0

貴重な返信をありがとう!分かりました! :) –

答えて

5

あなたはcompareメソッドの実装が間違っています。

それを試してみてください。

Collections.sort(arr, new Comparator<Pair>() { 
     @Override 
     public int compare(Pair o1, Pair o2) { 
      return Character.compare(o1.a, o2.b); 
     } 
    }); 

は、Java 8を使用する場合にも、あなたは次のようにコードを更新することができます。

arr.sort((o1, o2) -> Character.compare(o1.a, o2.a)); 
1

コンパレータは、-1,0

new Comparator<Pair>() { 
     @Override 
     public int compare(Pair o1, Pair o2) { 
      if (o1.a < o2.b){ return 1;} 
      else if(o1.a > o2.a) {return -1 } 
      else {return 0;} 
     } 
0

、1を返す必要があります比較可能な実装で可能な3つのオプションをカバーする必要があります。

when (o1.a < o2.a) 
when (o1.a > o2.a) 
when (o1.a = o2.a) 

いますが、基本的には

関連する問題