从hashmap中检索值并将它们添加到字符串中

时间:2016-02-12 01:17:42

标签: java android string hashmap

我基本上试图创建一个由hashmap中的所有值组成的字符串。

例如String finalOutcome = "forename=Bob&surname=Marl",hashmap将是:

Hashmap<String, String> maps = new Hashmap<String, String>();
maps.put("forename", forename);
maps.put("surname", surname);

当我尝试在hashmap中添加值以获取finalOutcome时,我的应用/程序会一直崩溃。这是我的代码,我该怎么做才能在hashmap的最后一个值之后找到&符号?我将此hashmap传递给另一个类中的另一个方法,如下所示:

public addMapValues(Hashmap<String, String> maps){
    for(int i=0; i<maps.size(); i++){
        finalOutcome += maps.get(i) + "&";
    }
}

正是这一点让我头疼不已,我相信这里的人几乎可以立即解决这个问题(是的,我对Java不好)

非常感谢一些帮助

2 个答案:

答案 0 :(得分:1)

  1. 使用StringBuilder在循环中连接字符串。
  2. 考虑Guava的map joiner
  3. 您的代码无效,因为您尝试按索引而不是按键查找值。地图未编入索引。如果要迭代值,则应使用Map.entrySet()
  4. 番石榴的例子:

    HashMap<String, String> map = new HashMap<String, String>();
    String result = Joiner.on('&').withKeyValueSeparator("=").join(map);
    

    循环示例:

    HashMap<String, String> map = new HashMap<String, String>();
    StringBuilder sb = new StringBuilder();
    for (Entry<String, String> entry : map.entrySet()) {
        sb.append('&').append(entry.getKey()).append('=').append(entry.getValue());
    }
    String result = sb.length() > 0 ? sb.substring(1) : "";
    

    Java 8流的示例(基于从某种原因删除的另一个答案):

    HashMap<String, String> map = new HashMap<String, String>();
    String result = map.entrySet().stream()
            .map(e -> e.getKey() + "=" + e.getValue())
            .collect(Collectors.joining("&"));
    

答案 1 :(得分:0)

考虑使用StringBuilder对象

StringBuilder finalOutcome  = new StringBuilder  ();

for (String name: maps.values()) {
    finalOutcome.append (name).append("&");
}

return finalOutcome.toString ();

考虑使用https://docs.oracle.com/javase/7/docs/api/java/util/Map.html#values() 从地图中获取数据

此外,请注意,如果您正在循环key,则使用相同的forename,因此,如果您要添加新人,则他们将替换地图中的现有人。