我有一个使用ArrayList实现“Set”的泛型类:
public class MySet<E> {
ArrayList <E> setList;
public MySet(){
this.setList = new ArrayList<E>();
}
public MySet(E[] inputArray){
this();
for(E element: inputArray)
insert( element);
}
...
现在我有另一个“Person.java”类,它具有“age”,“name”,“ID”的属性..
假设我创建一个Person []数组并从该数组中创建一个set类型的对象:
Person p1 = new Person("dani",15,12344);
Person p2 = new Person("michal",24,12354);
Person p3 = new Person("Leah",22,18888);
Person[] PeopleArr = {p1,p2,p3};
MySet<Person> People = new MySet<Person>(PeopleArr);
现在我想在Person中创建一个泛型方法,它获取一个MySet类型并返回一个具有最小年龄的Person类型的对象。我如何迭代这样的事情?
我知道传递数组时不是问题:
public static <E extends Comparable<Person> > E min (E[] array) {
if (array == null || array.length ==0) return null;
E min = array[0];
for(int i=0;i<array.length;i++){
if(array[i].compareTo((Person) min) <0) min = array[i];
}
return min;
}
public int compareTo(Object persona) {
// TODO Auto-generated method stub
Person person = (Person) persona;
if (this.age == person.age)
return 0;
else if(this.age < person.age)
return -1;
return 1;
}
但我希望签名为:
public static <E extends Comparable<Person> > E min (MySet<Person> set)
任何想法如何? (它不可能从MySet转换为ArrayList)迭代器似乎是唯一的方法,但不知道如何比较值
谢谢!!!
答案 0 :(得分:2)
在MySet类中实现Iterable
接口:
public class MySet<E> implements Iterable<E> {
...
public Iterator<E> iterator() {
return setList.iterator();
}
}
现在您可以遍历MySet
个项目:
for (Person person : set) {
}