有没有办法将 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 依赖项!
我有一个数组,我想将其转换为 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 依赖项!