[英]Create a map with key=String and value=ArrayList<Double>
[英]create map with string key and object reference value
我在我的作業的這一部分中遇到了麻煩:創建一個Map,其中的鍵是一種動物,而值是該動物的CartoonCharacter對象的列表,按名稱的字母順序存儲。 從地圖和鍵引用的對象列表中打印每個鍵。 我了解如何創建地圖以及鍵和值代表什么,但是我無法理解如何遍歷對象並提取用作鍵的類型。 也許使用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<>();
}
}
我已經累了幾件事,但是他們沒有做,因為就像在toons.put(rabbit,BugsBunny)中那樣使用put方法; 但這對我來說似乎不適合每個對象
嘗試這個。
Map<String, List<CartoonCharacter>> map = toons.stream()
.collect(Collectors.groupingBy(CartoonCharacter::getType, Collectors.toList()));
我假設CartoonCharacter類具有String getType()
方法。
該問題確切說明了您應該在地圖中存儲的內容:鍵是動物的類型(字符串,即“兔子”),值是該動物的卡通人物列表 。 一種簡單的方法是為每種動物創建一個列表,然后將相應的卡通人物放入其所屬的列表中。然后,您可以創建地圖,並將這些列表作為地圖中的值。
我們不知道CartoonCharacter類背后的代碼,但是我們可以假設希望會有一個名為getType或getAnimalType或類似方法的方法。 這樣便可以獲取每個角色的動物類型。
最好的方法是遍歷所有卡通人物,並使用我們認為存在的方法獲取它們的動物類型。 然后檢查您的地圖是否包含該動物類型的密鑰。 如果不是,則表示這是迄今為止該動物的首次出現,因此您將創建一個鍵,並為該值創建一個包含一個元素的列表:當前卡通人物。 但是,如果鍵存在,則意味着您需要做的就是獲取該動物類型的列表,然后將當前卡通人物添加到現有列表中。
這不是一個完整的答案,但我認為您想使用SortedMap而不是List。 您對問題的描述表明,您希望它們按字母順序排列,大概按物種(CartoonCharacter構造函數的第二個參數)進行。
因此,您想使用實現SortedMap的類,例如TreeMap。
所以... TreeMap myMap = new TreeMap;
然后
讓我們在CartoonCharacter類中添加標准的getter方法,以及獲取排序鍵的方法。 您還應該提供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-each循環:
for (CartoonCharacter ch: iter)
{
System.out.print(ch.toString();
}
我認為類似這樣的東西可以滿足您的需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.