java - 如何从通用数组列表中找到最小值?

标签 java generics arraylist min

我在尝试编写一个方法来返回通用 ArrayList 中体积最小的对象时遇到问题。这些是我编写代码的指导原则:

分钟() - 此方法采用有界通用类型的 ArrayList,该类型仅允许 Shape 对象及其子类。 - 该方法应返回对象列表中体积最小的对象。

但我并不完全确定我是否正确遵循了它。有没有办法可以使用 Collections.min (和 Collections.max 因为我也必须编写最大卷方法)?我收到绑定(bind)不匹配错误,提示:集合类型的通用方法 min(Collection) 不适用于参数 (ArrayList)。推断类型 Shape 不能有效替代有界参数 >

我的 Shape 类只是一个带有 getVolume() 的接口(interface);我的其他类(球体、椭圆体等)重写此方法的方法:

public interface Shape {
    public double getVolume();
}

这是我的 min 方法(在另一个具有其他方法的类中),我遇到了问题:

public static <T> T  min() {
    ArrayList<? extends Shape> list;    

     T min = Collections.min(list));
        return min;

最佳答案

这是因为 Java 在运行时删除类型,因此 Collection 不知道它实际处理的是什么类型。这是使用 Java 泛型时的一个限制因素 - 几年前我曾遇到过它,但我无法找到解决它的方法,结果证明它是一种语言限制。

最好的办法是创建一个 public T getMinVolume(ArrayList<T> list)迭代每个 T 的方法。

例如。

public T getMinVolume(ArrayList<T> list) {
    T min = null;
    for(T item: list) {
        if (min == null) {
            min = item;
        }

        if (min > item) {
            min = item;
        }
    }

    return min;
}

类似的事情,我的 Java 有点生疏,但逻辑应该可以工作。

关于java - 如何从通用数组列表中找到最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23125740/

相关文章:

java - 无法添加此项目,因为它不使用 Ant 脚本生成 JAR 文件

java - java中复杂的逻辑运算如何解析?

java - 尝试使用数组构建 stringBuffer

swift - 返回自定义 GeneratorType

java - 读取文本文件(约 90,000 个单词)并尝试将每个单词添加到字符串 ArrayList 中

Java if语句有2个条件和通用代码

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

java - List<T> 类型中的方法 add(T) 不适用于参数

java - 如何在indexOf中使用int[][]之外的列表?

java - 对内部有对象的 ArrayList 进行排序