2017-04-19 48 views
2

我正在爲大學做一個項目,並且如何通過我的hashmap進行搜索並將結果添加到列表中。通過Hashmap進行搜索並將結果添加到列表中

到目前爲止,我有一個建議類與這些變量和getter方法,setter方法構造和hashCode和equals:

private String title, queryName,Director,summary,myComments,category; 
private double Rating; 
private int myRating; 
private ArrayList<String> cast = new ArrayList<>(); 

所以我想要做的就是通過這個地圖推薦的一個角色名稱搜索並將結果添加到列表中。這是我迄今爲止所做的: private Map recs = new HashMap <>();

public void byActor(String actor) 
{ 

    if(recs.containsKey(actor)) 
    { 

     System.out.println(" The Actor "+actor + " has been in these films "); 

    } 

如果男主角不是HashMap的我不得不下車網站API的建議,這應該回到它作爲一個列表或建議,並把它添加到HashMap中(這將是一個本地存儲)

如何將搜索結果添加到列表中並將列表添加到散列表中?

+0

你是什麼意思'應該將它作爲列表返回? 「推薦」的「列表」? – aUserHimself

+0

@aUserHimself嗨對不起是它的一系列建議。生病編輯添加:) – EmilyP

+0

「actorMap」擁有什麼?它是來自網站API的迴應嗎? – aUserHimself

回答

1

它s eems你應該創建一個本地存儲,其中包含演員姓名地圖和建議列表(我可能會將其命名爲Recommendation Movie)。

方法來創建本地存儲

public Map<String, List<Recommendation>> localStoreOfMovies() { 

    // Call an API based on actor names, or maybe you have local list 
    Map<String, List<Recommendation>> localStore = 
     new HashMap<String, List<Recommendation>>(); 

    List<Recommendation> movies = new List<Recommendation>(); 
    // Add robert de niro movies to movies list 
    localStore.put("robertdeniro", movies); 

    return localStore; 
} 

根據演員的建議中獲取列表

如果您能夠創建本地存儲和創建地圖的演員,和列表建議,根據演員名單變得簡單,你可以做

public List<Recommendation> byActor(String actor) { 
    // all movies are coming from instance local store 
    return localStore.get(actor); 
} 
+0

好,所以我的答案應該工作,你遍歷所有電影列表,這可能是一個實例變量?然後有一個嵌套for循環來檢查轉換以查看該actor是否包含傳遞給'byActor'方法的actor的名稱。如果它包含添加到新列表並在所有回覆後循環返回。 –

+0

問題是:每次輸入演員姓名時,系統都會在本地存儲(哈希映射)中查找該名稱。我想我必須以某種方式搜索推薦的hashmap(存儲在文件中)以查看actor是否在cast(一個ArrayList)中,然後將結果添加到列表中。所以我認爲我必須通過hashmap迭代? – EmilyP

+0

@EmilyP所以你有一個hashmap的本地存儲,?關鍵是演員的名字?如果是這種情況,每個演員只會有一個推薦(電影).. 你提到過,這是一個賦值,你事先給出代碼或只是指示什麼必須完成? –

0

要添加列表中的數據

myList.add(myData); 

從列表中添加數據到地圖:

myMap.put(myKey, myValue); 
如果你想每一個數據列表中添加

for(dataType data : myList){ // this is a foreach 
    myMap.put(myKey, myValue); 
} 

乾杯

1

假設您想要爲地圖中的每個演員製作Recommendation s的列表,您需要一個Map<String, List<Recommendation>>。這被稱爲多圖

Map<String, List<Recommendation>> recommendationsByActor = new HashMap<>(); 

如果您使用的是Java 8中,您可以使用computeIfAbsent method添加推薦的演員,如下:

recommendationsByActor 
    .computeIfAbsent(actorName, k -> new ArrayList<>()) 
    .add(recommendation); 

這將得到的建議名單的演員,如果有已經在地圖上爲該演員提供了一項或多項建議。如果該演員還沒有任何推薦,computeIfAbsent將爲該演員創建一個空的ArrayList,並將其放入地圖中。 在這兩種情況下,給定的建議將被添加到該演員的推薦列表中。

如果你只是想獲得的建議清單對於一個給定的演員,只是做:

List<Recommendation> recommendations = recommendationsByActor.get(actorName); 

這將返回的建議清單對於一個給定的演員,或者null如果對於沒有推薦他她。

編輯:

如果不是創建一個空ArrayList誰曾在地圖上不建議一個演員,你需要得到建議關閉網站的API,可以在呼叫更改爲computeIfAbsent如下:

List<Recommendation> recommendations = recommendationsByActor 
    .computeIfAbsent(actorName, this::getRecommendationsForActorFromWebAPI); 

getRecommendationsForActorFromWebAPI將在同一個類的實例方法,具有以下特徵:

private List<Recommendation> getRecommendationsForActorFromWebAPI(String actorName) { 

    // TODO do the dirty work: call API and return recs list for actor 
} 

在這種情況下,computeIfAbsent將返回給定actor的推薦列表,或者從地圖本地(如果列表已存在)返回推薦列表,或者它將從API調用中獲取推薦列表並將其添加到在返回之前,該演員的地圖。

+1

哦,我從來沒有注意到'computeIfAbsent',並且總是用if來處理我的multimaps。謝謝你,先生。 –