处理HashMap <integer,hashmap <string,=“”integer =“”>&gt;匹配HashMap的字符串<string,integer =“”> </string,> </integer,>

时间:2014-08-11 02:14:17

标签: java

我有一个数据库表,其中包含电视节目类型列表和相关的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

每个电视节目(从不同的表格中检索)都有Film;Comedy类型的分隔字符串,所以我做了以下内容......

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<String, Integer>获取实际的字符串(键)以检查分隔的&#39;类型&#39; string包含它并使用它来获取流派颜色的ARGB整数?我是不是错了?

2 个答案:

答案 0 :(得分:1)

您的genre地图可以包含多种类型,因此您必须遍历这些键:

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

当然,如果genres字符串包含多个键(例如Film;Comedy),那么如果genre地图包含多个键,您应该考虑要执行的操作。您是否为找到的第一场比赛返回argbColor

答案 1 :(得分:1)

genre这里Map<String, Integer>只有一个Entry

您可以使用Set访问genre.entrySet()条目,然后获取第一个条目(通常是唯一)。

对于您的示例数据,与第一个类型相关联的是Entry"Science"FF52ADAB作为


,我建议您使用更明智的结构来表示您的数据......也就是说,我建议您创建此类数据一个班级:

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

    // constructor

    // getters
}

......并且:

Map<Integer, Row> 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;
    }
}