我有一个数据库表,其中包含电视节目类型列表和相关的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整数?我是不是错了?
答案 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;
}
}