用Java映射的2个数组。值数组可以包含null元素

时间:2017-12-28 16:00:37

标签: java java-8

我有2个数组(大小相同)String[]Object[]。 问题是:有没有更优雅的方式将它们转换为Map?

private Map<String, Object> arraysToMap(String[] keys, Object[] values) {
    Map<String, Object> map = new HashMap<>();
    if (keys.length != 0) {
        for (int i = 0; i < keys.length; i++) {
            map.put(keys[i], values[i]);
        }
    }
    return map;
}

Java 8风格可能吗?

重要说明:

  • values可能包含空值
  • keys包含非null的唯一元素

1 个答案:

答案 0 :(得分:1)

要解决此问题,您可以使用以下代码:

public class Test {
    static String[] keys = {"String1", "String2"};
    static Object[] values = {new Object(), new Object()};

    public static void main(String[] args) {
        Map<String, Object> map = IntStream.range(0, keys.length)
                .boxed()
                .collect(Collectors.toMap(i -> keys[i], i -> values[i]));
    }
}

你可以看到我首先创建了一个从零到keys.length的范围,然后我们用它们相应的对象包装类替换了流的原始值。最后,我们使用Collectors.toMap方法来实际创建地图。还要确保尺寸相等。