搜索Hashmap并将结果添加到List

时间:2017-04-19 14:27:59

标签: java list hashmap

我正在为大学做一个项目,并且如何搜索我的hashmap并将结果添加到List中。

到目前为止,我有一个推荐类,包含这些变量以及getter,setters构造函数和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&lt;&gt;();

public void byActor(String actor)
{

    if(recs.containsKey(actor))
    {

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

    }

如果演员不在散列图中,我必须从网站API获得建议,该网站应将其作为列表或推荐返回,并将其添加到散列图(将是本地商店)

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

3 个答案:

答案 0 :(得分:1)

似乎你应该创建一个包含演员姓名地图和建议书列表的本地商店(我可能会将其命名为推荐电影)。

创建本地商店的方法

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);
}

答案 1 :(得分:1)

假设您希望为地图中的每位演员提供Recommendation的列表,则需要Map<String, List<Recommendation>>。这称为 multimap

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

如果您使用的是Java 8,则可以使用computeIfAbsent method为演员添加推荐内容,如下所示:

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

如果在地图中已经有一个或多个针对该actor的推荐,那么这将获得演员的推荐列表。如果还没有针对该演员的推荐,computeIfAbsent将为该演员创建一个空ArrayList并将其放入地图中。 在这两种情况下,给定的建议都会添加到该角色的推荐列表

如果您只想获取给定演员的推荐列表,只需执行以下操作:

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

这将返回给定演员的推荐列表,如果没有针对他/她的推荐,则返回null

修改

如果您没有为地图中没有推荐的演员创建​​空ArrayList,而是需要从网站API获取建议,您可以将呼叫更改为computeIfAbsent,如下所示:< / p>

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调用中获取推荐列表,在返回之前将其添加到该actor的地图上。

答案 2 :(得分:0)

在列表中添加数据

myList.add(myData);

将列表中的数据添加到地图中:

myMap.put(myKey, myValue);

如果要添加列表中的每个数据:

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

干杯