何が取得するための最良の方法であminとmaxの値のリストから比較対象取引をメインを含むnull値?
-
21-08-2019 - |
質問
って思ったこと。
public static <T extends Comparable<T>> T minOf(T...ts){
SortedSet<T> set = new TreeSet<T>(Arrays.asList(ts));
return set.first();
}
public static <T extends Comparable<T>> T maxOf(T...ts){
SortedSet<T> set = new TreeSet<T>(Arrays.asList(ts));
return set.last();
}
がnullでない場合は安全を何とかして欲しいところです。
いります。
編集:
後のコメントもありましmin():
public static <T extends Comparable<T>> T minOf(T...ts){
return Collections.min(Arrays.asList(ts), new Comparator<T>(){
public int compare(T o1, T o2) {
if(o1!=null && o2!=null){
return o1.compareTo(o2);
}else if(o1!=null){
return 1;
}else{
return -1;
}
}});
}
どのようなところが良いと思いる。
解決
<のhref = "http://java.sun.com/javase/6/docs/api/java/util/Collections.html#max(java.util.Collection)" と間違って何のrel = "noreferrer 「> Collections.max の?
そして、なぜあなたはヌルの安全性を気にしていますか?あなたはヌルがあなたのコレクションであることを許可してもよろしいですか?
他のヒント
、そして多分あなただけの単純なループで配列を反復処理し、「分」を追跡する必要があります別々の変数でと「最大」。あなたはまだあなたの現在の「分」と「最大」の値と比較するために、各オブジェクトの「比較()」メソッドを使用することができます。このように、あなたはヌルをチェックし、それらを無視するための独自のコードを追加することができます。
編集:ここで私が話しているものを説明するためにいくつかのコードです。渡されたすべての引数がnullであればどのような - 残念ながら、あなたが考慮する必要があるエッジケースはありますか?あなたの方法は何を返すのですか?
public static <T extends Comparable<T>> T minOf(T...ts){
T min = null;
for (T t : ts) {
if (t != null && (min == null || t.compareTo(min) < 0)) {
min = t;
}
}
return min;
}
public static <T extends Comparable<T>> T maxOf(T...ts){
T max = null;
for (T t : ts) {
if (t != null && (max == null || t.compareTo(max) > 0)) {
max = t;
}
}
return max;
}
す べきではない の実施 Comparable
受け入れnullの場合、どれていますが、インタフェースの契約になります。
から https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html :
ご注意nullではないインスタンスのクラスは、e.compareTo(null)は投げNullPointerExceptionもの。equals(null)はfalseを返します。
必ず新しいインタフェースなど ComparableNull
です。
参照: