Android 在HashMap的Arraylist中搜索值

Android 在HashMap的Arraylist中搜索值,android,arraylist,hashmap,Android,Arraylist,Hashmap,我正在尝试从hashmap的arraylist中搜索、跟踪名称。我在这方面搜索了很多网站,但找不到任何解决方案 以下是创建哈希映射的Arraylist的代码: ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); searchText = (EditText) findViewById(R.id.searchText);

我正在尝试从hashmap的arraylist中搜索、跟踪名称。我在这方面搜索了很多网站,但找不到任何解决方案

以下是创建哈希映射的Arraylist的代码:

 ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
 searchText = (EditText) findViewById(R.id.searchText);

  //Count from the server
  int count = dataCount();

  for (int i = 0; i < dataCount; i++) 
    {
        HashMap<String, String> map = new HashMap<String, String>();

        // adding data to HashMap key => value
        map.put(KEY_ID, trackNumber);
        map.put(KEY_TITLE, trackTitle);
        map.put(KEY_ARTIST, trackArtist);
        map.put(KEY_DURATION, trackDuration);
        map.put(KEY_THUMB_URL, trackAlbumArt);

        // adding HashList to ArrayList
        songsList.add(map);

    }

    adapter=new LazyAdapter(this, songsList);        
    list.setAdapter(adapter);
ArrayList songsList=new ArrayList();
searchText=(EditText)findViewById(R.id.searchText);
//从服务器计数
int count=dataCount();
对于(int i=0;ivalue
地图放置(钥匙ID、轨道号);
地图放置(按键标题、轨迹标题);
地图放置(按键艺术家、轨迹艺术家);
地图放置(按键持续时间、轨迹持续时间);
map.put(KEY\u THUMB\u URL,trackAlbumArt);
//将哈希列表添加到ArrayList
歌曲列表。添加(地图);
}
adapter=新的LazyAdapter(此,songsList);
list.setAdapter(适配器);
在TextChanged上,我正在尝试获取搜索结果并用新结果更新适配器

我在尝试类似的逻辑

但是没有得到任何结果


谢谢

选项1:迭代列表项并搜索匹配项:

// this code wasn't tested - but I'm sure you'll get the idea
Map getSong(String title) {
    for(Map song : songsList) {
        if(song.get(KEY_TITLE).equals(title)) {
            return song;
        }
    }
    return Collections.emptyMap();
}
选项2(首选):将歌曲保存到另一个地图(而不是列表)中,并使用标题作为“键”:


您希望能够通过哪个值进行搜索?(KEY\u ID/KEY\u TITLE/…)我想获得KEY\u TITLE值您想要多完美?对于这种数据结构,只有一种解决方案是在songsList中迭代映射并进行搜索。如果您有性能问题,您需要更改数据结构。@Loc Ha:我还没有任何解决方案。选项2:问题是我正在使用CustomAdapter在listview中显示列表歌曲、艺术家、持续时间和唱片集。如果我更改为“地图”,那么我将如何获取数据以在listview中显示它?title.setText(song.get(Songview.KEY_title));?对于您的第一个注释,映射的值可以轻松地转换为列表:
list list=new ArrayList(songsList.values())至于你的第二条评论,我想我理解了这个问题-请参阅上面的代码更改,了解选项1:现在它返回空。@Devman运行一个调试器,并在
if
条件中添加一个断点,以了解它失败的原因。对不起,我不能帮你调试。
Map<String, HashMap<String, String>> songsList = new HashMap<String, HashMap<String, String>>();

// add a song:
HashMap<String, String> map = new HashMap<String, String>();
map.put(KEY_ID, trackNumber);
map.put(KEY_TITLE, trackTitle);
map.put(KEY_ARTIST, trackArtist);
map.put(KEY_DURATION, trackDuration);
map.put(KEY_THUMB_URL, trackAlbumArt);
// adding HashList to Map
songsList.put(trackTitle, map);
Map getSong(String title) {
    return songsList.get(title);
}