有没有办法将 Array 转换为 Map?

Is there a way to convert Array into a Map?

我有一个数组,我想将其转换为 Map,这样数组中的第一个元素是键,第二个元素是值,依此类推。

我正在尝试如下操作:

Arrays.asList("Tamilnadu", "chennai", "Karnataka", "Bengluru")
                .stream()
                .collect(HashMap::new,
                        (a, b) -> a.put(b, ""),//value should be next element in array
                        (a, b) -> a.putAll(b)
                );

我的困惑是如何在同一收集迭代中获取下一个元素,以便我可以做到 a.put(b,nextElementToB)

有人可以通过使用流来帮助解决这个问题,因为我想尝试同样的函数式编程吗?迭代是唯一的方法吗?

您可以使用 List 的索引中的 IntStream:

Map<String,String> map = 
    IntStream.range(0,list.size()/2)
             .boxed()
             .collect(Collectors.toMap(i->list.get(2*i),i->list.get(2*i+1)));

这是假设 List 有偶数个元素。

流一次只看一个项目,它们相互独立。这是为了允许可以保留或不保留顺序的并行流。

Java 流不适合您要在此处执行的任务。首先将您的数据按摩到单个原子对象中。在这种情况下,普通的 for 循环要么遍历索引,要么使用迭代器。

你可以使用 toMap 方法

public static Map toMap(Object[] array)

Converts the given array into a Map. Each element of the array must be either a Map.Entry or an Array, containing at least two elements, where the first element is used as key and the second as value.

This method can be used to initialize:

// Create a Map mapping colors. Map colorMap = ArrayUtils.toMap(new String[][] { {"RED", "#FF0000"}, {"GREEN", "#00FF00"}, {"BLUE", "#0000FF"}}); This method returns null for a null input array.

Parameters: array - an array whose elements are either a Map.Entry or an Array containing at least two elements, may be null

Returns: a Map that was created from the array

Throws: IllegalArgumentException - if one element of this Array is itself an Array containing less then two elements IllegalArgumentException - if the array contains elements other than Map.Entry and an Array

所以可以如下使用

Map map = ArrayUtils.toMap(arrayName);

而且您必须先从以下位置导入 ArrayUtils:

import org.apache.commons.lang3.ArrayUtils;

注意:这是不是内置方法;您需要 Apache Commons 依赖项!