我有一个List字符串,实际上是键和值:( "key1", "value1", "key2", "value2", ...每个奇数项都是一个键,每个偶数值).我怎样才能将它转换为Map喜欢这种"key1" -> "value1", "key2" -> "value2", ...在一个美丽的方式?
你可以简单地做:
Iterator<String> it = list.iterator();
while(it.hasNext()) {
map.put(it.next(), it.next());
}
Run Code Online (Sandbox Code Playgroud)
这比使用该get(index)方法更有效(如果列表实现不允许随机访问)
如果你的列表具有随机访问权限,就像一个ArrayList,直接的方法是循环遍历列表中的元素,步骤为2:
public static void main(String[] args) {
List<String> list = Arrays.asList("key1", "value1", "key2", "value2");
Map<String, String> map = new HashMap<>();
for (int i = 0; i < list.size() - 1; i += 2) {
map.put(list.get(i), list.get(i + 1));
}
System.out.println(map);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这也正确处理列表长度不均匀的情况.它将忽略最后一个元素.例如,如果列表是"key1", "value1", "key2",则输出将是地图{key1=value1}.
这是一种相对简洁的方法:
var map = IntStream.range(0, list.size() / 2).boxed()
.collect(Collectors.toMap(i -> list.get(i * 2), i -> list.get(i * 2 + 1)));
Run Code Online (Sandbox Code Playgroud)
我不确定是否有一种“美丽”的方法,但这是最简单的方法:
while (!list.isEmpty()) {
map.put(list.remove() ,list.remove());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3275 次 |
| 最近记录: |