【问题标题】:How to get the keys from a LinkedHasMap?如何从 LinkedHashMap 中获取密钥?
【发布时间】:2014-04-29 22:23:56
【问题描述】:

我有一个填充 listView 的代码:

JSONArray data = responseData.getJSONArray("data");
String[] values = new String[data.length()];//I wanna get rid of this

LinkedHashMap<String, String> helpData = new LinkedHashMap();
for (int i = 0; i < data.length() ; i++) {
  String header = data.getJSONObject(i).getString("glossary_header");
  String description = data.getJSONObject(i).getString("gloassary_description");

  helpData.put(header, description);
    values[i] = header;
  Log.d("mylog", "counter" + i);
}

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
        android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);

我想将密钥传递给Arrayadapter,我希望找到一个getKeys() 方法,它可以神奇地从映射中返回一个密钥数组。

KeySet() 已关闭但不起作用,正确的方法是什么。我不想使用字符串数组。我想将我的配对值放在一起。

【问题讨论】:

  • “keySet() 不起作用”是什么意思?这是正确的做法。它在哪些方面不适合您的目的?
  • @DavidWallace 编译器抱怨这个集合,arrayAdapter 想要一个数组来代替
  • 是否可以将集合的内容复制到数组中?
  • 您可以使用 for-each 循环,例如 for(String key: yourLinkedHashMap.keySet()){ System.out.println(key); }

标签: java android json linkedhashmap


【解决方案1】:

你可以这样

   Collection<String> values = helpData.keySet();

     for (String string : values) {
           //
       }

【讨论】:

  • 真的吗?我需要循环两次
【解决方案2】:
Set<String> keys = myArray.keySet();
String[] keysAsArray = keys.toArray(new String[0]);

有关toArray 方法的更多详细信息,请访问http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray(T[])

【讨论】:

  • 谢谢,我正在寻找单线!现在我很想知道你为什么传递它new String[0] 它也适用于不同的索引。你能详细说明一下吗?请
  • 当然。你也可以写keys.toArray(),但它返回一个Object[],因为Java 运行时无法知道要创建什么类型的数组。有一个叫做“类型擦除”的东西,这基本上意味着尖括号内的任何内容都会被编译器删除。所以解决这个问题的方法是将一个虚拟数组传递给toArray,告诉它要制作什么类型的数组。如果你传入一个足够大的数组,这个方法只会填充数组。如果您的数组太小,此方法将构建一个正确类型的新数组。
  • 说的有道理,谢谢学习了,很有用。如果你不介意,再问一个问题。我这样做对吗。我需要对值,因为我想在另一个视图中显示详细信息。我的代码是一个好的开始吗?
  • 如果你需要对(我猜你的意思是键和值在一起),那你为什么只要求键?你说的“其他观点”不能接受LinkedHashMap吗?
  • 因为我在我的 listView 中显示键然后如果按下我想显示值。有意义吗?
【解决方案3】:
for (final String key : helpData.keySet()) {
  // print data...
}

或

final Iterator<String> cursor = helpData.keySet().iterator();
while (cursor.hasNext()) {
  final String key = cursor.next();
 // Print data
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    相关资源
    最近更新 更多