Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在自定义集合上使用`Collections.min()`?_Java_Generics_Collections_Comparison_Min - Fatal编程技术网

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

Java 如何在自定义集合上使用`Collections.min()`?,java,generics,collections,comparison,min,Java,Generics,Collections,Comparison,Min,我编写了一个名为MySet的自定义集合,它本质上是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[

我编写了一个名为
MySet
的自定义集合,它本质上是
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;
    }
}
我们根据
age
字段比较
Person
对象

需要编写第三个类,该类只包含将接收
MySet
对象的方法,并将确定最小的
。当然,这可以通过使用两个循环来手动完成,以找到最小年龄,但关键是对泛型使用Java方法,因此我建议在
MySet
上使用
Collections.min()

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;
    }
}
公共类最小类{
公共T minElement(MySet set){
集合。最小值(集合);
}
}

它没有编译并给出错误:
不存在类型变量的实例,因此MySet符合Collection,因为
HashSet
是一个
集合
,您可以在它上面调用
Collections.min
。请注意,为了使用
Collections.min
,您应该将其限制为
T
s中的
compariable

public class MinimumClass<T extends Comparable<T>> {
    public T minElement(MySet<T> mySet) {
        return Collections.min(mySet.getSet());
    }
}
公共类最小类{
公共T minElement(MySet MySet){
返回Collections.min(mySet.getSet());
}
}

为什么要避免使用
MySet
实现
集合
接口?@Mureinik,因为我必须实现10个方法才能只使用一个。你可以将它们全部委托给底层的
集合
。。。不管怎样-是否有任何方法可以从
MySet
获取元素?您共享的代码段没有显示任何内容。@Mureinik是的,我有
getSet()
方法,我编辑了OP以添加它。此代码未编译,并返回与OP中相同的错误。@statefi添加
return
statement@Yos:我知道,我刚才提到了代码中的错误。@Yos当时被抓住了,我道歉。“编辑并修复了。@斯塔菲被卷入了这一刻,我道歉。编辑和固定。
public class MinimumClass<T extends Comparable<T>> {
    public T minElement(MySet<T> mySet) {
        return Collections.min(mySet.getSet());
    }
}