【问题标题】:Search through Hashmap and add results to a List搜索 Hashmap 并将结果添加到 List
【发布时间】:2017-09-15 20:28:29
【问题描述】:

我正在为大学做一个项目,但在如何搜索我的 hashmap 并将结果添加到列表中遇到了困难。

到目前为止,我有一个带有这些变量以及 getter、setter 构造函数和 hashcode 和 equals 的 Recommendation 类:

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

所以我想做的是在这张推荐地图中搜索演员姓名并将结果添加到列表中。这是我到目前为止所做的: 私有 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(这将是本地存储)

如何将搜索结果添加到列表中并将列表添加到哈希图中?

【问题讨论】:

  • should return it as a list 是什么意思? listRecommendation?
  • @aUserHimself 嗨,抱歉,是的,它是推荐列表。生病编辑以将其添加到:)
  • actorMap 有什么作用?是来自网站 API 的响应吗?
  • 哦,虽然我已经注释掉了,抱歉。
  • 我打算使用哈希图,但我错过了阅读问题并认为我应该将它添加到另一个地图。

标签: java list hashmap


【解决方案1】:

在列表中添加数据

myList.add(myData);

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

myMap.put(myKey, myValue);

如果你想添加列表中的每一个数据:

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

干杯

【讨论】:

    【解决方案2】:

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

    创建本地商店的方法

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

    【讨论】:

    • 好的,所以我的答案应该有效,您遍历所有电影列表,这可能是一个实例变量?然后有一个嵌套的 for 循环来检查演员表,看看演员是否包含传递给 byActor 方法的演员的名字。如果它包含添加到新列表并在您遍历所有推荐后返回。
    • 问题是:每次输入演员姓名时,系统都会在本地存储(Hash Map)中查找该姓名。我想我必须以某种方式搜索推荐的哈希图(存储在文件中)以查看演员是否在演员表中(一个 ArrayList),然后将结果添加到列表中。所以我认为我必须遍历哈希图?
    • @EmilyP 所以你有一个散列图的本地存储, ?关键是演员的名字?如果是这种情况,每个演员只有一个推荐(电影)。你提到这是一项任务,你事先给出了代码,或者只是说明必须做什么?
    • @EmilyP 看看我的新答案。
    • 好的,我刚刚得到了指示。我为它制作了推荐类和哈希图。 Map actorMap = new HashMap(); (第一次使用哈希图,所以我不确定我要做什么来制作关键角色?问题是您需要编写一个应用程序,根据存储在本地数据存储(缓存)中的所选角色提供 Netflix 推荐。
    【解决方案3】:

    假设您想为地图中的每个演员创建一个Recommendations 列表,您需要一个Map&lt;String, List&lt;Recommendation&gt;&gt;。这称为多重映射

    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 将返回给定参与者的推荐列表,或者从地图本地返回(如果列表已经存在),或者从 API 调用获取推荐列表并添加它到该演员的地图,然后将其返回。

    【讨论】:

    • 哦,我从来没有注意到 computeIfAbsent 并且总是用 if 来处理我的多图。谢谢你,先生。
    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 2019-07-22
    • 2016-08-15
    相关资源
    最近更新 更多