Tôi đang nghĩ về một cái gì đó như thế này:Cách tốt nhất để lấy giá trị tối thiểu và tối đa từ danh sách Các giá trị so sánh có chứa giá trị null là gì?
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();
}
Nhưng không phải là null an toàn, đó là điều mà tôi muốn quá.
Bạn có biết cách nào tốt hơn để giải quyết vấn đề này không?
EDIT:
Sau những ý kiến tôi cũng đã cố gắng 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;
}
}});
}
Bạn nghĩ gì về điều đó?
Đó là hiệu quả kể từ khi bạn cần O (n log n) so sánh, kể từ khi TreeSet hiệu quả sắp xếp các Bộ sưu tập, trong đó n so sánh đủ. Ngoài ra, bạn tạo ra rất nhiều rác không cần thiết (Arrays.asList tạo ra một bản sao của "ts", và TreeSet không phải là nhẹ, quá). – mfx
Arrays.asList không tạo bản sao của mảng. –
Có điều đó có hiệu quả, nhưng tại sao không khai báo và đặt tên cho bộ so sánh đó ở nơi có thể tái sử dụng? Sau đó, thay vì sử dụng hàm minOf này, chỉ cần gọi Collections.min chuẩn với bộ so sánh được đặt tên đó. Mã của bạn trở nên dễ đọc hơn nhiều bằng cách sử dụng các cuộc gọi thư viện chuẩn. – Pyrolistical