Java 搜索Hashmap并将结果添加到列表中
我正在为大学做一个项目,在如何搜索我的hashmap并将结果添加到列表中遇到了难题 到目前为止,我有一个推荐类,其中包含以下变量以及getter、setter构造函数、hashcode和equals: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
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
}