2017-12-29 44 views
0

私はコードを実行するのに非常に時間がかかります。私は、指定されたListからすべての重複をソートして削除するジェネリックメソッドを持っています。 List内の項目(Stringなど)は、すべてComparableインターフェイスを実装しています。 残念ながら、これは私がこれまでに得たものであるJavaジェネリックスの型引数

public static <T> List<T> distinctAndSort(List<T> s) { 
    List<T> list = s.stream().distinct().collect(Collectors.toList()); 
    Collections.sort(list); //Error 
    return list; 
} 

...コードがコンパイルされていないと私は理由を理解していません。 List<T>をソートすることができないのはなぜですか? (タイプコレクションのメソッドソート(List<T extends Comparable<? super T>>)は引数(List<T>)には適用されません。

は私の機能を動作させるためには、私が何をしないのですか?Thxをすべての助けを

答えて

10

あなたのタイプの変数を宣言以下のように:

<T extends Comparable<? super T>> 

これはあなたの方法でのみComparableを実装する型と呼ばれるように制限し、したがって、あなたが明示的にComparatorなしCollections.sortを呼び出すことができます

また、メソッドの追加パラメータとしてComparator<? super T>を指定し、Collections.sortに渡すこともできます。

また、あなたはストリームAPIでソートを行うことができますのでご注意:

return s.stream() 
    .distinct() 
    .sorted() 
    .collect(Collectors.toList()); 
1

ドキュメントによると、Collections.sort(List<T>)Comparable秒のリストでなければならないか、Comparator<T>を供給しなければなりません。あなたはあなたの署名を変更することができます。

public static <T extends Comparable<? super T>> List<T> distinctAndSort(List<T> s) 

https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List) https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List,%20java.util.Comparator)

+0

おかげで、シャルムのように働きました! :) – whiterose