Java 进程HashMap<;整数,HashMap<;字符串,整数>&燃气轮机;匹配HashMap的字符串<;字符串,整数>;

Java 进程HashMap<;整数,HashMap<;字符串,整数>&燃气轮机;匹配HashMap的字符串<;字符串,整数>;,java,Java,我有一个数据库表,其中包含电视节目类型列表和相关的ARGB颜色值,用于在显示电视指南时突出显示Android ListView中的电视节目。流派表如下所示 id genre color i Science FF52ADAB 2 Film FFDC7223 然后我做下面的 Map<Integer, Map<String, Integer>> genreList = new HashMap<Integer, HashMap<String

我有一个数据库表,其中包含电视节目类型列表和相关的ARGB颜色值,用于在显示电视指南时突出显示Android ListView中的电视节目。流派表如下所示

id   genre   color
i    Science FF52ADAB
2    Film    FFDC7223
然后我做下面的

Map<Integer, Map<String, Integer>> genreList = new HashMap<Integer, HashMap<String, Integer>>();
// Populate genreList
if (genreList != null) {
    int genreCount = genreList.size();
    Map<String, Integer> genre;
    int argbColor;

    // Get the delimited genres field of the TV show, e.g., Film;Comedy
    String genres = cursor.getString(cursor.getColumnIndex("genres"));

    for (int count = 0; count < genreCount; count ++) {
        genre = genreList.get(count);
        genres = cursor.getString(cursor.getColumnIndex("genres"));

        // Now I need to get the key from the genre HashMap
        if (genres.contains(/* genre key here */)) {
            // Now get the ARGB value associated with the genre
            argbColor = genre.get(/* genre key here */);
            return argbColor;
        }
    }
}

那么,如何从
HashMap
中获取实际字符串(键),以检查分隔的'genres'字符串是否包含它,并使用它获取类型颜色的ARGB整数?我这样说完全错了吗?

您的
类型地图可以包含多个类型,因此您必须迭代键:

    genre = genreList.get(count);
    for (String g : genre.keySet()) {
      if (genres.contains(g)) {
        // Now get the ARGB value associated with the genre
        argbColor = genre.get(g);
        return argbColor;
      }
    }

<>当然,如果<代码>类型>代码>字符串包含多个键(例如<代码>电影;喜剧< /代码>),如果<代码>类型> /Cord>map包含多于一个键,则应该考虑你想做什么。您是否返回找到的第一个匹配项的
argbColor

您的
类型
这是一个
地图
,它只有一个
条目

您可以使用
genre.entrySet()
访问条目的
Set
,并获取第一个条目(通常只有条目)

对于您的示例数据,与第一类类型相关联的将是一个
条目
,它将
作为
,将
FF52ADAB
作为


然而,我建议您使用更合理的结构来表示数据。。。也就是说,我建议创建这样一个类:

public class Row {
    private final String genre;
    private final Integer colour;

    // constructor

    // getters
}
。。。并具有:

Map<Integer, Row> genreList = new HashMap<>();
Map genreList=new HashMap();
。。。您可以按如下方式使用:

genres = cursor.getString(cursor.getColumnIndex("genres"));

for (int count = 0; count < genreCount; count ++) {
    genre = genreList.get(count);

    final String genreName = genre.getGenre();
    final String genreColour = genre.getColour();

    // Now I need to get the key from the genre HashMap
    if (genres.contains(genreName)) {
        // Now get the ARGB value associated with the genre
        return genreColour;
    }
}
genres=cursor.getString(cursor.getColumnIndex(“genres”);
对于(int count=0;count
流派是否只有一个元素?假设id=2,那么类型散列只包含其中的电影?是的,实际类型表中每个类型有一行。这是一个电视节目,它可以界定与之相关的类型。好吧,重复键集可能是我错过的。你说得对,我可能只想匹配第一个,所以我需要使用
startsWith(…)
而不是
contains(…)
。谢谢。稍加修改就解决了我的问题。谢谢。我接受了Eran的答案,因为它很容易与我当前的代码配合使用。不过你说得对——从逻辑上讲,我需要为流派名称和颜色定义一个类,而这正是我打算做的事情。不幸的是,我使用的是以前从未正确运行过的遗留代码,所以我需要先将其处理到一定程度,然后才能继续前进。