当前位置: 首页 > 知识库问答 >
问题:

如何用Java中的映射遍历映射

汪臻
2023-03-14

我有以下代码:

/*
if inputDetailsMap has values like:
String      String
 key1       value1
 key2       value2
 key3       value3
 key4       value4
 key5       value5
so on.....
*/

public void inputData(Map<String,String> inputDetailsMap, String fileName){
    //a for loop to run
          String value = inputDetailsMap.get("key" + i);    // i value comes from the for loop
          //i am doing something with the value.
    //end of for loop
}

如果我想迭代Map,上面的代码工作得很好。但是现在我有这样的东西。

/*
inputDetailsMap has values like:
int         String      String
 1           key1       value1
             key2       value2
             key3       value3
             key4       value4
             key5       value5
 2           key1       value1
             key2       value2
             key3       value3
             key4       value4
             key5       value5
so on.....
*/
 public void inputData(Map<Integer,Map<String,String>> inputDetailsMap, String fileName){
      //how to iterate and get the value using inputDetailsMap.get() like the above code??
}

我想在映射中遍历映射,并获取它的键和值。我想得到key1、value1、key2、value2、key3、value3的值,依此类推。那我该怎么做呢?

共有3个答案

陆光济
2023-03-14
public void inputData(Map<Integer,Map<String,String>> inputDetailsMap) {
    for (Map.Entry<Integer, Map<String,String> entry : inputDetailsMap.entrySet()) {            
        Map<String, String>innerMap = entry.getValue()
        for (Map.Entry<String, String> keyPair : innerMap.entrySet()) {
            String key = keyPair.getKey();
            String value = keyPair.getValue();
            // do something with value
        }
    }
}
郎飞航
2023-03-14

你可能会更好地看一些像番石榴的多重地图:

http://tomjefferys.blogspot.co.uk/2011/09/multimaps-google-guava.html

http://guava-libraries.googlecode.com/svn-history/r14/trunk/javadoc/com/google/common/collect/Multimap.html

但如果不使用它:

import java.util.HashMap;
import java.util.Map;

 public class MapInMap {

public static void main(String[] args){

    for (Integer index: outerMap.keySet()){
        for (String innerIndex: outerMap.get(index).keySet()){
            System.out.println(String.format("%s :: %s :: %s", index, innerIndex, outerMap.get(index).get(innerIndex)));
        }
    }

}

/*
inputDetailsMap has values like:
int         String      String
 1           key1       value1
             key2       value2
             key3       value3
             key4       value4
             key5       value5
 2           key1       value1
             key2       value2
             key3       value3
             key4       value4
            key5       value5
so on.....
*/
static Map<String, String> innerMap1 = new HashMap<String, String>(){{
    put("key1", "value1");
    put("key2", "value2");
    put("key3", "value3");
    put("key4", "value4");
    put("key5", "value5");
}};
static Map<String, String> innerMap2 = new HashMap<String, String>(){{
    put("key1", "value1");
    put("key2", "value2");
    put("key3", "value3");
    put("key4", "value4");
    put("key5", "value5");
}};

static Map<Integer, Map<String,String>> outerMap = new HashMap<Integer, Map<String,String>>(){{
    put(1, innerMap1);
    put(2, innerMap2);
}};
}
凌和悦
2023-03-14

你可以使用:

String value = inputDetailsMap.get(1).get("key" + i);

First get将获得正确的地图

第二次获取将获得正确的值(对于键1、键2…)

 类似资料:
  • 问题内容: Freemarker有两个集合数据类型,即列表和哈希图。有没有一种方法可以像对列表一样遍历哈希图键? 因此,如果我有一个带有数据的变量,则可以说: 我想用其值打印所有用户的属性。这是无效的,但目标很明确: 问题答案: 编辑: 不要在FreeMarker 2.3.25及更高版本中使用此解决方案,尤其是不要使用。查看其他答案。 您使用内置的按键功能,例如,这应该可以工作:

  • 我有我创建的地图的地图 我尝试在第二个映射中迭代键的值。 所以它可以是这样的: key1->keya->value1 -------->键->值2 -------->键->值4 -------->KeyC->value1 我想继续多久就继续多久。 因此,我有,并尝试使用名为的值变量和增量计数器if来循环中的所有值 我不知道如何获得。我试着这样做 但这给了我信笺。 如果我执行,它会给出我想要的正确值

  • 当前正在读取Head First Servlet JSP。我目前陷入了映射servlet。这可能是一个愚蠢的问题,但如何才能正确地映射servlet url模式呢?我正在使用eclipse mars,这是我第一次使用JSP/servlet。在创建动态web项目时,我总是检查generate web xml 这是默认web.xml中的内容 它使用这个来运行 但当我将其添加到显示名称下方时 它给我一个

  • 我有一个实体,看起来像这样: 输入数据是一个

  • 我目前正在使用Spring Boot、Hibernate和Spring HATEOAS构建一个带有REST接口的应用程序。我的数据模型被定义为带有注释的bean,我正在使用Spring的功能自动设置一个Hibernate存储库(创建一个扩展

  • 问题内容: 我们有一张有很多列的大桌子。移至MySQL Cluster后,由于以下原因无法创建表: 错误1118(42000):行大小太大。不包括BLOB在内的已使用表类型的最大行大小为14000。这包括存储开销,请查阅手册。您必须将某些列更改为TEXT或BLOB 举个例子: 这是用于存储配置参数的表。我在想,我们可以将一些列合并为一个列,并将其存储为JSON对象,然后将其转换为Java对象。 例