是否可以在不使用.doubleValue()的情况下重写以下代码?

时间:2015-10-10 21:37:20

标签: java

所以我正在尝试编写一个使用泛型的方法。该方法假设采用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()的情况下编写上述方法?谢谢!

2 个答案:

答案 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;
}