今、整数と文字列の配列をソートする at コンパレーターを書きました。コードからわかるように、2 つのクラスが同じでない場合、String クラスはより大きい値を取ります。ただし、これは 2 つのクラスしか許可しません。Float などの別のプリミティブ型を配列に追加したい場合はどうすればよいですか? if-else ステートメントにさらにコードを追加する必要があります。比較したい追加のクラスごとにステートメントを追加せずに比較を実装する方法はありますか?
import java.util.Arrays;
import java.util.Comparator;
public class SampleComparator implements Comparator<Object> {
public static void main(String[] args) {
Object[] inputData = { new String("pizza"), new Integer(0),
new String("apples"), new Integer(5), new String("pizza"),
new Integer(3), new Integer(7), new Integer(5) };
Arrays.sort(inputData, new SampleComparator());
System.out.println(Arrays.asList(inputData));
}
public int compare(Object o1, Object o2) {
if (o1.getClass().equals(o2.getClass())) {
return ((Comparable)o1).compareTo((Comparable)o2);
} else {
if(o1.getClass().getCanonicalName().equals("java.lang.String")){
return 1;
} else {
return -1;
}
}
}
}
出力:
[0, 3, 5, 5, 7, apples, pizza, pizza]