Java ArrayList<;HashMap<;字符串,字符串>&燃气轮机;键迭代/输出到数组
如果我有一个类型Java ArrayList<;HashMap<;字符串,字符串>&燃气轮机;键迭代/输出到数组,java,android,types,Java,Android,Types,如果我有一个类型 ArrayList<HashMap<String,String>> keys = functionWhichReturnsThisType(); arraylistkeys=functionWhichReturnsThisType(); 我如何迭代,以使我最终在一个字符串数组中得到all,并同样进入另一个字符串数组 我曾尝试使用迭代器,但数据类型中的层次结构让我感到困惑 appPrefs = new AppPreferences(context.g
ArrayList<HashMap<String,String>> keys = functionWhichReturnsThisType();
arraylistkeys=functionWhichReturnsThisType();
我如何迭代,以使我最终在一个字符串数组中得到all,并同样进入另一个字符串数组
我曾尝试使用迭代器,但数据类型中的层次结构让我感到困惑
appPrefs = new AppPreferences(context.getApplicationContext());
ArrayList<HashMap<String,String>> keys = appPrefs.getDownloadUrls();
ArrayList<String> urls = new ArrayList<String>();
ArrayList<String> filenames = new ArrayList<String>();
Iterator myIterator = keys.keySet().iterator();
while(myIterator.hasNext()) {
urls.add((String)myIterator.next());
filenames.add((String)keys.get(myIterator.next()));
}
appPrefs=新的AppPreferences(context.getApplicationContext());
ArrayList keys=appPrefs.getDownloadUrls();
ArrayList URL=新的ArrayList();
ArrayList文件名=新的ArrayList();
迭代器myIterator=keys.keySet().Iterator();
while(myIterator.hasNext()){
add((String)myIterator.next());
添加((字符串)键.get(myIterator.next());
}
如果顺序不重要,您可以试试
for (HashMap<String, String> map : keys) {
urls.addAll(map.keys());
filenames.addAll(map.values());
}
for (HashMap<String, String> map : keys) {
for (Map.Entry<String, String> entry : map.entrySet()) {
urls.add(entry.getKey());
filenames.add(entry.getValue());
}
}
for(HashMap映射:键){
addAll(map.keys());
addAll(map.values());
}
如果你想维持秩序,你可以试试
for (HashMap<String, String> map : keys) {
urls.addAll(map.keys());
filenames.addAll(map.values());
}
for (HashMap<String, String> map : keys) {
for (Map.Entry<String, String> entry : map.entrySet()) {
urls.add(entry.getKey());
filenames.add(entry.getValue());
}
}
for(HashMap映射:键){
对于(Map.Entry:Map.entrySet()){
add(entry.getKey());
add(entry.getValue());
}
}
此方法适用于提取第一个和第二个字符串
private void getFirstAndSecondStrings(ArrayList<HashMap<String,String>> keys){
ArrayList<String> firstStrings = new ArrayList<String>();
ArrayList<String> secondStrings = new ArrayList<String>();
for (HashMap<String, String> map : keys) {
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry pairs = (Map.Entry)iterator.next();
firstStrings.add((String)pairs.getValue());
secondStrings.add((String)pairs.getKey());
}
}
}
private void GetFirstandSecondString(ArrayList键){
ArrayList FirstString=新的ArrayList();
ArrayList secondStrings=新的ArrayList();
for(HashMap:keys){
迭代器迭代器=map.entrySet().Iterator();
while(iterator.hasNext()){
Map.Entry pairs=(Map.Entry)迭代器.next();
添加((字符串)pairs.getValue());
添加((字符串)pairs.getKey());
}
}
}
好的,我将浏览您的示例代码,说明您遇到的问题,并建议如何使其正常工作
ArrayList<HashMap<String,String>> keys = appPrefs.getDownloadUrls();
这些都很好,但在典型的Java中,最好使用List url=new ArrayList()
尝试使用接口而不是具体实现来保存变量
Iterator myIterator = keys.keySet().iterator();
while(myIterator.hasNext()) {
这不起作用,因为keys
是一个ArrayList
,而列表中没有要执行的keySet()
:
Iterator<HashMap<String,String> listIterator = keys.iterator();
while(listIterator.hasNext()) {
HashMap<String,String> map = listIterator.next();
Iterator<String> myIterator = map.keySet().iterator();
while(myIterator.hasNext()) {
一旦你让myIterator
成为地图上的迭代器,而不是列表上的迭代器,上述方法就可以了
filenames.add((String)keys.get(myIterator.next()));
但这并不是因为两个原因
键
仍然是一个列表next
,则会得到两个不同的对象李>
您需要:
String url = myIterator.next();
urls.add(url);
filenames.add(map.get(url));
或者,如果使用我上面建议的for(each)循环,那么可以跳过第一行
希望这能有所帮助-如果有不清楚的地方,请添加评论
注意:
solilo
的解决方案简单得多,而且是一种很好的解决方法,我的答案在这里帮助您了解您遇到的麻烦。请发布您迄今为止所做的工作,我们将帮助您完成。链接可能会对您有所帮助。[正如您所见,我正在尝试将它们添加到我代码中的列表中,我知道如何在以后将其转换为字符串[]。这是一个非常好的解释,您为我清除了一些内容,非常感谢。
String url = myIterator.next();
urls.add(url);
filenames.add(map.get(url));