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

标签 java generics collections comparison min

我编写了一个名为 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的类它代表一个人的基本细节并实现 Comparable接口(interface):

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

我们比较Person基于 age 的对象 field 。

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

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>据我了解,这意味着我必须实现 Collection接口(interface)在 MySet

是否有更简单的方法来编写使用 Person 来确定最少人数的方法实现ComparableMySet是泛型类吗?

最佳答案

由于 HashSet 是一个 Collection,因此您只需对其调用 Collections.min 即可。请注意,您应该将其限制为ComparableT,以便使用Collections.min

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

关于java - 如何在自定义集合上使用 `Collections.min()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47951099/

相关文章:

java - 在java中转义+-和--

java - 泛型 - 定义 Map<MyClassA<?>, MyClassB<?>> 确保两者 ?是相同的?

Java反射: getting correct type of parameterized generic superclass method

java8从对象基本条件列表中删除对象

C++如何存储模板对象的集合而不考虑模板

Java 列表/集合性能

java - Android ListView.notifyDataSetChanged 导致不正确的行

java - "to=3573072/3600000"在 java.io.EOFException : HttpConnectionOverHTTP? 异常中意味着什么

java - spring data jpa repository inject在spring boot中使用@Autowired注入(inject)失败

c# - C# 中的重载解析、扩展方法和泛型