简体   繁体   English

如何在 java 中将二维数组转换为linkedhashmap

[英]How to convert two-dimensional array to linkedhashmap in java

I am learning Java Programming.我正在学习 Java 编程。

I have a task, need to convert a two-dimensional array to a Map<Character, Integer> for testing.我有一个任务,需要将二维数组转换为Map<Character, Integer>进行测试。

Object[][] args = new Object[][]{
                {'1', 1},
                {' ', 5},
                {'2', 2},
                {'3', 3},
                {'4', 4},
                {'5', 5},
                {'6', 6}};

Map<Character, Integer> expectedResult = arrayToMap(args);

I wrote a method:我写了一个方法:

public Map<Character, Integer> arrayToMap(Object[][] args) {
        Map map = new LinkedHashMap();
        for (Object[] i : args) {
            for (Object j : i) {
                map.put(i, j);
            }
        }
        return map;
    }

But I can't understand why it doesn't convert Character.但我不明白为什么它不转换字符。 Input:输入:

Expected :{[Ljava.lang.Object;@6b1274d2=1, [Ljava.lang.Object;@7bc1a03d=5, [Ljava.lang.Object;@70b0b186=2, [Ljava.lang.Object;@ba8d91c=3, [Ljava.lang.Object;@7364985f=4, [Ljava.lang.Object;@5d20e46=5, [Ljava.lang.Object;@709ba3fb=6}
Actual   :{1=1,  =5, 2=2, 3=3, 4=4, 5=5, 6=6}

Please advise, what I'm doing wrong请指教,我做错了什么

i is an array, so when you put it as the key of your Map , you get a Map<Object[],Object> . i是一个数组,所以当你把它作为Map的键时,你会得到一个Map<Object[],Object>

You don't need a nested loop:您不需要嵌套循环:

public Map<Character, Integer> arrayToMap(Object[][] args) {
    Map<Character, Integer> map = new LinkedHashMap<>();
    for (Object[] i : args) {
        map.put((Character) i[0], (Integer) i[1]);
    }
    return map;
}

Each inner array of your 2D array should become a pair of key and value in the output Map .二维数组的每个内部数组都应该成为 output Map中的一对键和值。

Use Stream API with Callectors.toMap method:将 Stream API 与 Callectors.toMap 方法一起使用:

public static Map<Character, Integer> arrayToMap(Object[][] arr) {
        return (Arrays.stream(arr)
            .collect(Collectors.toMap(kv -> (Character)kv[0],
                                      kv -> (Integer)kv[1],
                                      (oldV, newV) -> newV,
                                      LinkedHashMap::new
                                      )));
}

2D array in Java is an array of arrays ; Java 中的二维数组是Java数组 ie in your example, you have a 1D array of 1D arrays with exactly 2 elements [char, int]即在您的示例中,您有一个 1D arrays 的一维数组,其中正好有 2 个元素[char, int]

public static void main(String[] args) {
    Object[][] arr = {
            { '1', 1 }, { ' ', 5 }, { '2', 2 }, { '3', 3 },
            { '4', 4 }, { '5', 5 }, { '6', 6 } };

    Map<Character, Integer> map = arrayToMap(arr);
    System.out.println(map);
}

public static Map<Character, Integer> arrayToMap(Object[][] arr) {
    Map<Character, Integer> map = new HashMap<>();

    for (int i = 0; i < arr.length; i++)
        map.put((char)arr[i][0], (int)arr[i][1]);

    return map;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM