2016-05-02 9 views
0

私の割り当てのこの部分に問題があります。キーが動物の一種で、その値が のCartoonCharacterオブジェクトのリストであるマップを作成します。動物は、 のアルファベット順に格納されています。マップから各キーを印刷し、キーが参照する オブジェクトのリストを印刷します。私はマップを作成する方法とキーと値が何を表しているのか理解していますが、オブジェクトを繰り返し処理し、キーとして使用する型を抽出する方法を理解できません。たぶんputメソッドを使用して?ここでのコードは、私が疲れたカップルの事を持っていますが、それらは toons.put(ウサギ、バッグス・バニー)のようにputメソッドを使用してのようなので、作るいけない、これまで文字列キーとオブジェクト参照値でマップを作成

public class CartoonDriver { 

public static void main(String[] args) { 

    //Construct objects of cartoon characters 
    CartoonCharacter BugsBunny = new CartoonCharacter("Bugs Bunny","rabbit",1990); 
    CartoonCharacter RogerRabbit = new CartoonCharacter("Roger Rabbit", "rabbit",1858); 
    CartoonCharacter MickeyMouse = new CartoonCharacter("Mickey Mouse", "mouse",1928); 
    CartoonCharacter MinnieMouse = new CartoonCharacter("Minnie mouse", "mouse",1930); 
    CartoonCharacter RoadRunner = new CartoonCharacter("Road Runner", "roadrunner",1986); 
    CartoonCharacter DaffyDuck = new CartoonCharacter("Daffy Duck", "duck",1999); 
    CartoonCharacter DonaldDuck = new CartoonCharacter("Donald Duck", "duck",1958); 
    CartoonCharacter ScoobyDoo = new CartoonCharacter("Scooby Doo", "dog",1975); 
    CartoonCharacter WinnieThePooh = new CartoonCharacter("Winnie The Pooh", "bear",1963); 
    CartoonCharacter Snoopy = new CartoonCharacter("Snoopy", "dog",1959); 


    //Create toons array list to add characters to 
    List<CartoonCharacter> toons = new ArrayList<CartoonCharacter>(); 

    //Add each characther to the array list 
    toons.add(BugsBunny); 
    toons.add(RogerRabbit); 
    toons.add(MickeyMouse); 
    toons.add(MinnieMouse); 
    toons.add(RoadRunner); 
    toons.add(DaffyDuck); 
    toons.add(DonaldDuck); 
    toons.add(ScoobyDoo); 
    toons.add(WinnieThePooh); 
    toons.add(Snoopy); 

    //print each object 
    for(CartoonCharacter toon : toons){ 
     System.out.println(toon); 
    } 

    //Create Map to hold type of toon and toon object as value 
    Map<String, CartoonCharacter> toonsMap = new HashMap<>(); 






} 

}

です。 しかし、それはすべてのオブジェクトのためにそれを行う必要があるように私に正しいように見えません。

+0

この[Javaチュートリアル](https://docs.oracle.com/javase/tutorial/collections/interfaces/map.html)を参照してください。 – randominstanceOfLivingThing

+0

'CartoonCharacter'には' toons 'を使用できる型を取得する手段があると仮定します。 put(toon.getType()、toon) 'を呼び出すことができますが、複数のキーを持つことはできないので、指定された型の' CartoonCharacter'を含む 'List'を使う必要があります。次に、キーを順序付ける 'TreeMap'を使用することができます。 'toon.getType'を使用するポイントは、あなたの既存の' List';をループするだけです); – MadProgrammer

答えて

2

これを試してください。

Map<String, List<CartoonCharacter>> map = toons.stream() 
    .collect(Collectors.groupingBy(CartoonCharacter::getType, Collectors.toList())); 

私は、クラスCartoonCharacterがString getType()メソッドを持っていると仮定しました。

0

キーは動物の種類(文字列、つまり「ウサギ」)の種類で、値はリストの動物の種類の漫画の文字です。簡単なやり方は、動物の種類ごとにリストを作成し、それぞれの漫画キャラクターを所属するリストに入れることです。次に、これらのリストをマップ内の値としてマップを作成することができます。

CartoonCharacterクラスの背後にあるコードはわかりませんが、getTypeやgetAnimalTypeなどのメソッドがあると思われます。これは、各キャラクターの動物タイプを取得する方法です。

おそらくこれを行うには、漫画のキャラクタをすべてループし、想定されている方法で動物の種類を取得するのが最も良い方法です。次に、地図にその動物タイプのキーが含まれているかどうかを確認します。表示されていない場合は、これまでにその動物が最初に出現したことを意味します。したがって、キーを作成し、値として1つの要素、つまり現在の漫画キャラクターを含むリストを作成します。しかし、キーが存在する場合は、その動物タイプのリストを取得し、現在の漫画のキャラクターを既存のリストに追加するだけです。

0

これは完全な答えではありませんが、リストではなくSortedMapを使用したいと思います。問題の説明では、おそらく種(CartoonCharacterコンストラクタの2番目のパラメータ)によってアルファベット順に欲しいと言います。

したがって、SortedMapを実装するクラス、たとえばTreeMapを使用する必要があります。

so ... TreeMap myMap = new TreeMap;

その後、

はのは、標準的なgetterメソッドのトンをあなたのCartoonCharacterクラスを追加してみましょう、ともソート・キーを取得する方法。また、toStringメソッドまたはCartoonCharacterの印刷可能な表現を得る他のメソッドを提供する必要があります。

Class CartoonCharacter 
{ 
... 
public getName() { return name; } 
public getSpecies { return species; } 
public getBirthDate { return birthDate; } 
public getSortKey { String s = getSpecies(); return s.concat(getName()); } 
... 
} 

myMap.put(BugsBunny.getSortKey()、BugsBunny); ...

最後に、keySet()メソッドを使用してキーのイテレータを取得し、それを反復処理することができます。

Iterator iter = myMap.keySet().iterator(); 

古いバージョンのJavaでは、hasNext()およびnext()を使用してキーを反復処理します。近代的なJavaでは、あなたがのために、各ループを使用することができます

for (CartoonCharacter ch: iter) 
{ 
    System.out.print(ch.toString(); 
} 

を私はこのような何かが何をしたいあなたを取得すると思います。

+0

ok iこれを好きです。私はこれらのgetterとsetterとクラスの良いtoStringメソッドを持っていますが、それぞれがイテレータの型では使用できないというフラグを取得していますか? – Cake771

+0

イテレータはhasNextメソッドを持っていることがわかります。私はwhileループでそれを使用しようとし、それが動作するかどうかを確認します。私はJava 8を実行していますので、古いバージョンではありません – Cake771