所以我正在尝试编写一个使用泛型的方法。该方法假设采用arrayList并返回数组中的最高值。这是执行该操作的代码
public T largest() {
T value = myList.get(0);
for (int i = 1; i < myList.size(); i++) {
if (myList.get(i).doubleValue() > value.doubleValue()) {
value = myList.get(i);
}
}
return value;
}
唯一的问题是我不想使用.doubleValue。我一直被困在试图弄清楚几个小时而没有运气,但是Generics真的因为某些原因让我失望。我想以某种方式投出一些东西?如何在不使用.doubleValue()的情况下编写上述方法?谢谢!
答案 0 :(得分:3)
我认为这是他们在给你这项任务时的想法
列表中的元素必须是Comparable
这样您只需拨打compareTo
即可比较它们
这种实现更通用,更通用
也就是说,您不需要限制自己使用doubleValue
。
package test;
import java.util.Arrays;
import java.util.List;
public class Test001 {
public static void main(String[] args) {
Long a = largest(Arrays.asList(new Long[]{2L, 5L, 7L}));
Integer b = largest(Arrays.asList(new Integer[]{2, 5, 7}));
System.out.println(a);
System.out.println(b);
}
public static <T extends Comparable<? super T>> T largest(List<T> myList) {
T value = myList.get(0);
for (int i = 1; i < myList.size(); i++) {
if (myList.get(i).compareTo(value) > 0) {
value = myList.get(i);
}
}
return value;
}
}
答案 1 :(得分:2)
如果定义了元素的排序,则只能找到最大的元素。由于您已经为方法指定了此类订单Comparator
,因此您假设&#34;自然顺序&#34;,这意味着元素必须为Comparable
您的功能更改为以下内容(更改为static
以进行此独立答案&#34;完成&#34;):
public static <T extends Comparable<T>> T largest(Iterable<T> myList) {
T largest = null;
for (T value : myList)
if (largest == null || value.compareTo(largest) > 0)
largest = value;
return largest;
}