以下代码可以使用迭代模式执行。
List<String> strList = Arrays.asList("abc", "def","ghi", "jkl");
Map<Integer, String> strMap = new HashMap<>();
int i = 0;
for(String str : strList) {
strMap.put(i++, str);
}
是否可以使用 Java Streams API 来完成上述操作?
我期待以上代码以 Java Streams API 的形式出现。
您可以使用 IntStream#range 和 IntStream#boxed 创建一个包含 0 到
Stream<Integer>
(含)之间的整数值的 strList.size() - 1
。然后您就可以使用 collect
与 Collectors.toMap
进行操作,如下所示。
Map<Integer, String> strMap = IntStream.range(0, strList.size())
.boxed()
.collect(Collectors.toMap(Function.identity(), strList::get));
toMap
的
keyMapper使用生成的整数值作为映射的键,valueMapper从列表中相应的索引获取值。
注意:如果列表不是ArrayList,则
strList::get
将不是恒定时间操作。