如何映射3个列表,其中第一个的值是键,其余的值是地图的值?

时间:2017-09-29 17:23:59

标签: java dictionary arraylist

假设此列表示例[[a,b,c],[1, ,3],[12,34, ]]是列表列表。 试图将其转换为地图中的地图就像这样。

a = 1, 12
b = null, 34
c = 3, null

请注意我已经从下面的字符串

创建了上面的列表列表
a:b:c|1::3|12:34:|

这里的方法是首先将此字符串转换为列表列表,然后将第一个列表元素作为键,并将其他值作为此键的值。

1 个答案:

答案 0 :(得分:2)

  • 首先你需要迭代第一个列表的元素(a b c)
  • 然后,对于每个你需要迭代其他列表(来自索引1)
  • 以相同的顺序取回他们的价值

完整的直接使用代码:

public static void main(String[] args) {

    List<List<String>> list = new ArrayList<>();
    list.add(new ArrayList<>(Arrays.asList("a", "b", "c")));
    list.add(new ArrayList<>(Arrays.asList("1", null, "3")));
    list.add(new ArrayList<>(Arrays.asList("12", "34", null)));

    Map<String, List<String>> map = new HashMap<>();
    for (int i = 0; i < list.get(0).size(); i++) {
        List<String> value = new ArrayList<>();
        for (int j = 1; j < list.get(0).size(); j++) {
            value.add(list.get(j).get(i));
        }
        map.put(list.get(0).get(i), value);
    }       

    System.out.println(map.toString()); // {a=[1, 12], b=[null, 34], c=[3, null]}
}

提示

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));允许您(稍后)将其他元素添加到列表

List<String> list list = Arrays.asList("a", "b", "c");不允许稍后添加其他元素

Code Demo