2017-12-23 56 views
1

私はそれが本質的HashSetのラッパーだ、MySet<T>と呼ばれるカスタムコレクションを書きました:私もPersonというクラスを書いたなどintersect()カスタムコレクションで `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; 
    } 
} 

それはunion()のようなセットに関連するメソッドが含まれてい

を人に関する基本的な詳細を表しており、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オブジェクトを比較します。

IのみMySet<Person>オブジェクトを受け取り、最小Personを決定する方法を有することになる第三のクラスを記述する必要が。もちろん、これは最低年齢を見つけるために2つのループを使用して手動で行うことができますが、ポイントは、ジェネリック医薬品のためのJavaメソッドを使用することですので、私はしかしMySet<Person>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>私が理解する限り、MySetCollectionインターフェイスを実装する必要があることを意味します。

PersonComparableおよびMySetを実装するという事実を利用して最小限の人を決定する方法を書くのが簡単な方法はありますか?

+0

なぜ 'MySet'に' Collection'インタフェースをimplmenetするのを避けていますか? – Mureinik

+1

@Mureinikなぜなら、1つだけを使用するためには10のメソッドのようなものを実装しなければならないからです。 – Yos

+0

あなたは、それらをすべて基本的な 'Set'に委譲することができます...関係なく、' MySet'から要素を戻す方法はありますか?共有したスニペットには何も表示されません。 – Mureinik

答えて

2

HashSetCollectionなので、Collections.minと呼ぶことができます。 Collections.minを使用するには、ComparableであることをTに制限する必要があります。

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

このコードはコンパイルされず、OPと同じエラーを返します。 – Yos

+0

@STaefiこれは 'return'ステートメントを追加した後もまだコンパイルされません。 – Yos

+0

@Yos:私はちょうどコード内の誤りについて言及しました。 – STaefi

関連する問題