Java 搜索Hashmap并将结果添加到列表中

Java 搜索Hashmap并将结果添加到列表中,java,list,hashmap,Java,List,Hashmap,我正在为大学做一个项目,在如何搜索我的hashmap并将结果添加到列表中遇到了难题 到目前为止,我有一个推荐类,其中包含以下变量以及getter、setter构造函数、hashcode和equals: private String title, queryName,Director,summary,myComments,category; private double Rating; private int myRating; private ArrayList<String> ca

我正在为大学做一个项目,在如何搜索我的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<>();
如果参与者不在hashmap中,我必须从网站API获取建议,该API应将其作为列表或建议返回,并将其添加到hashmap(将是本地存储)


如何将搜索结果添加到列表并将列表添加到hashmap

在列表中添加数据

myList.add(myData);
要将列表中的数据添加到地图,请执行以下操作:

myMap.put(myKey, myValue);
如果要添加列表中的所有数据:

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

干杯

看来您应该创建一个本地商店,其中包含演员姓名地图和推荐列表(我可能会命名为推荐电影)

创建本地存储的方法

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;
 }
publicmap localStoreOfMovies(){
//基于参与者名称调用API,或者您有本地列表
映射本地存储=
新的HashMap();
列表电影=新列表();
//将罗伯特·德尼罗电影添加到电影列表
localStore.put(“罗伯特德尼罗”,电影);
返回本地存储;
}
获取基于参与者的推荐列表

如果您能够创建本地存储并创建参与者地图和推荐列表,那么基于参与者获取列表就变得简单了,您只需这样做

public List<Recommendation> byActor(String actor) {
    // all movies are coming from instance local store
    return localStore.get(actor);
}
public List by actor(String actor){
//所有电影都来自本地商店
返回localStore.get(actor);
}

假设您想为地图中的每个参与者提供一个
推荐
列表,您需要一个
地图
。这称为多重映射

如果地图中已经有一个或多个推荐给某个参与者,那么这将得到该参与者的推荐列表。如果尚未为该参与者提供建议,
computeIfAbsent
将为该参与者创建一个空的
ArrayList
,并将其放入映射中。在这两种情况下,给定的建议都将添加到该参与者的建议列表中

如果您只想获得给定参与者的推荐列表,只需执行以下操作:

List<Recommendation> recommendations = recommendationsByActor.get(actorName);
其中
getRecommendationsFractorFromWebAPI
将是同一类中的实例方法,具有以下签名:

private List<Recommendation> getRecommendationsForActorFromWebAPI(String actorName) {

    // TODO do the dirty work: call API and return recs list for actor
}
私有列表GetRecommendationsFractorFromWebAPI(字符串actorName){
//TODO做脏活:调用API并返回actor的recs列表
}

在这种情况下,
computeIfAbsent
将返回给定参与者的建议列表,或者从映射本地返回(如果列表已经存在),或者从API调用获取建议列表,并将其添加到该参与者的映射中,返回前。

您所说的
应将其作为列表返回是什么意思?
推荐的
列表
?@aUserHimself你好抱歉是的,这是一个推荐列表。我将编辑以添加到:)actorMap包含什么?这是来自网站API的响应吗?哦,我想我已经对此发表了评论。对不起。我本来打算使用hashmap,但我没有读到这个问题,并认为我应该将它添加到另一个映射中。好吧,我的答案应该有效,你迭代了所有电影列表,这可能是一个实例变量?然后使用嵌套的for循环检查强制转换,以查看actor是否包含传递给
byActor
方法的actor的名称。如果它包含add to new list,并在循环所有推荐之后返回。问题是:每次输入参与者名称时,系统都会在本地存储(哈希映射)中查找该名称。我想我必须以某种方式搜索推荐的hashmap(存储在一个文件中),以查看参与者是否在cast(一个ArrayList)中,然后将结果添加到一个列表中。所以我想我必须遍历hashmap?@EmilyP所以你有一个hashmap的本地存储,当然?关键是演员的名字?如果是这种情况,每个演员只有一个推荐(电影)。。你提到这是一项作业,你在作业前给出了代码,或者只是说明了必须做什么?@EmilyP看看我的新答案。好吧,我只是得到了说明。我为它创建了推荐类和hashmap。Map actorMap=new HashMap();(第一次使用hashmaps,所以我不确定我该怎么做才能成为关键参与者?问题是你需要编写一个应用程序,根据存储在本地数据存储(缓存)中的选定参与者提供Netflix建议。哦,我从来没有注意到
ComputeFabSent
,总是用if处理我的多重映射。谢谢你,先生。
recommendationsByActor
    .computeIfAbsent(actorName, k -> new ArrayList<>())
    .add(recommendation);
List<Recommendation> recommendations = recommendationsByActor.get(actorName);
List<Recommendation> recommendations = recommendationsByActor
    .computeIfAbsent(actorName, this::getRecommendationsForActorFromWebAPI);
private List<Recommendation> getRecommendationsForActorFromWebAPI(String actorName) {

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