使用Java8流将数组转换为HashMap

使用Java8流将数组转换为HashMap,java,json,string,hashmap,Java,Json,String,Hashmap,我正在编写一个函数,使用Java8流将数组转换为映射 public static <K, V> Map<K, V> toMap(Object... entries) { // Requirements: // entries must be K1, V1, K2, V2, .... ( even length ) if (entries.length % 2 == 1) { throw new IllegalArgument

我正在编写一个函数,使用Java8流将数组转换为映射

    public static <K, V> Map<K, V> toMap(Object... entries) {
    // Requirements:
    // entries must be K1, V1, K2, V2, .... ( even length )
    if (entries.length % 2 == 1) {
        throw new IllegalArgumentException("Invalid entries");
    }

    // TODO
    Arrays.stream(entries).????
}
公共静态映射toMap(对象…条目){
//要求:
//条目必须是K1、V1、K2、V2等(偶数长度)
if(entries.length%2==1){
抛出新的IllegalArgumentException(“无效条目”);
}
//待办事项
数组。流(条目)。????
}
有效用法

    Map<String, Integer> map1 = toMap("k1", 1, "k2", 2);

    Map<String, String> map2 = toMap("k1", "v1", "k2", "v2", "k3", "v3");
    Map<String, Integer> map1 = toMap("k1", 1, "k2", 2, "k3");
map1=toMap(“k1”,1,“k2”,2);
map2=toMap(“k1”、“v1”、“k2”、“v2”、“k3”、“v3”);
无效用法

    Map<String, Integer> map1 = toMap("k1", 1, "k2", 2);

    Map<String, String> map2 = toMap("k1", "v1", "k2", "v2", "k3", "v3");
    Map<String, Integer> map1 = toMap("k1", 1, "k2", 2, "k3");
map1=toMap(“k1”,1,“k2”,2,“k3”);
有什么帮助吗

谢谢

您可以使用

    public static <K, V> Map<K, V> toMap(
                               Class<K> keyType, Class<V> valueType, Object... entries) {
    if(entries.length % 2 == 1)
        throw new IllegalArgumentException("Invalid entries");
    return IntStream.range(0, entries.length/2).map(i -> i*2)
        .collect(HashMap::new,
                 (m,i)->m.put(keyType.cast(entries[i]), valueType.cast(entries[i+1])),
                 Map::putAll);
}
publicstaticmap-toMap(
类keyType、类valueType、对象…条目){
if(entries.length%2==1)
抛出新的IllegalArgumentException(“无效条目”);
返回IntStream.range(0,entries.length/2).map(i->i*2)
.collect(HashMap::new,
(m,i)->m.put(keyType.cast(条目[i]),valueType.cast(条目[i+1]),
地图:putAll);
}
您可以使用

    public static <K, V> Map<K, V> toMap(
                               Class<K> keyType, Class<V> valueType, Object... entries) {
    if(entries.length % 2 == 1)
        throw new IllegalArgumentException("Invalid entries");
    return IntStream.range(0, entries.length/2).map(i -> i*2)
        .collect(HashMap::new,
                 (m,i)->m.put(keyType.cast(entries[i]), valueType.cast(entries[i+1])),
                 Map::putAll);
}
publicstaticmap-toMap(
类keyType、类valueType、对象…条目){
if(entries.length%2==1)
抛出新的IllegalArgumentException(“无效条目”);
返回IntStream.range(0,entries.length/2).map(i->i*2)
.collect(HashMap::new,
(m,i)->m.put(keyType.cast(条目[i]),valueType.cast(条目[i+1]),
地图:putAll);
}

您是否意识到它已经存在?它从
Java9
开始就存在了

下面创建键和值的不可变映射

map2=Map.of(“k1”、“v1”、“k2”、“v2”、“k3”、“v3”);
对于可变映射,请执行以下操作:

map2=新的HashMap(Map.of(“k1”、“v1”、“k2”、“v2”、“k3”、“v3”);

您是否意识到它已经存在?它从
Java9
开始就存在了

下面创建键和值的不可变映射

map2=Map.of(“k1”、“v1”、“k2”、“v2”、“k3”、“v3”);
对于可变映射,请执行以下操作:

map2=新的HashMap(Map.of(“k1”、“v1”、“k2”、“v2”、“k3”、“v3”);

您可以这样使用它

Map map = ArrayUtils.toMap(arrayName);
您可以从以下位置导入ArrayUtil:

import org.apache.commons.lang3.ArrayUtils;

只需包含Apache JAR即可

您可以这样使用它

Map map = ArrayUtils.toMap(arrayName);
您可以从以下位置导入ArrayUtil:

import org.apache.commons.lang3.ArrayUtils;

只包括Apache JAR

问题明确提到Java 8,因此Java 9不在本问题范围内问题明确提到Java 8,因此Java 9不在本问题范围内您的目的是什么<存在代码>地图的。您这样做的目的是什么<代码>映射存在。