如何在自定义集合上使用 `Collections.min()`?

How to use `Collections.min()` on custom collection?

我写了一个名为 MySet<T> 的自定义集合,它本质上是对 HashSet:

的包装
import java.util.Collections;
import java.util.HashSet;

public class MySet <T> {
    private HashSet<T> set;

    public MySet() {
        this.set = new HashSet<>();
    }

    public MySet(T[] elements) {
        this.set = new HashSet<>();
        Collections.addAll(this.set, elements);
    }
    public HashSet<T> getSet() {
        return this.set;
    }
}

它包含与 union()intersect() 等集合相关的方法

我还写了一个名为 Person 的 class,它表示一个人的基本细节并实现了 Comparable 接口:

public class Person implements Comparable<Person> {
    private int id;
    private String name;
    private int age;

    public Person(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }

    private boolean equals(Person p) {
        return this.age == p.age;
    }

    public int compareTo(Person p) {
        return this.age - p.age;
    }
}

我们根据 age 字段比较 Person 个对象。

需要编写第三个class,它将只有接收MySet<Person>对象的方法,并将确定最小值Person.当然这可以通过使用两个循环来找到最小年龄来手动完成,但重点是对泛型使用 Java 方法,所以我虽然在 MySet<Person>:[=32 上使用 Collections.min() =]

public class MinimumClass<T> {
    public T minElement(MySet<T> set) {
        Collections.min(set);
    }
}

无法编译并给出错误:no instance(s) of type variable(s) T exist so that MySet<T> conforms to Collection<? extends T> 据我所知,这意味着我必须在 MySet 中实现 Collection 接口。

有没有更简单的方法来编写确定最小人数的方法,利用 Person 实现 ComparableMySet 是通用 class 的事实?

由于 HashSetCollection,您可以直接调用 Collections.min。请注意,您应该将其限制为 ComparableT,以便使用 Collections.min

public class MinimumClass<T extends Comparable<T>> {
    public T minElement(MySet<T> mySet) {
        return Collections.min(mySet.getSet());
    }
}