【发布时间】:2010-12-22 19:38:35
【问题描述】:
使用for (String item: list) 会很好,但它只会遍历一个列表,并且您需要一个显式迭代器来处理另一个列表。或者,您可以对两者都使用显式迭代器。
这是一个问题示例,以及使用索引for 循环的解决方案:
import java.util.*;
public class ListsToMap {
static public void main(String[] args) {
List<String> names = Arrays.asList("apple,orange,pear".split(","));
List<String> things = Arrays.asList("123,456,789".split(","));
Map<String,String> map = new LinkedHashMap<String,String>(); // ordered
for (int i=0; i<names.size(); i++) {
map.put(names.get(i), things.get(i)); // is there a clearer way?
}
System.out.println(map);
}
}
输出:
{apple=123, orange=456, pear=789}
有没有更清晰的方法?也许在某个地方的集合 API 中?
【问题讨论】:
-
列表是使示例通用还是您的实际用例是从 String[] 数组开始的?
-
@PSpeed 我的真实用例使用
Lists 而不是数组;只有一个是字符串。 -
如果列表的长度可能不相等,您可能希望迭代次数仅为最短列表的长度:for(int i = 0; i
-
如果您的列表是索引列表(如 ArrayList 和该数组包装器),那么我说坚持使用索引。如果它们是随机集合,那么迭代器方法总体上表现更好。如果你发现你经常使用这种模式,你甚至可以编写一个 Coiterator 包装器,它会从两个迭代器返回一个双值条目并包装错误检查等。
-
您确定需要这样做吗?这是构建地图的一种非常糟糕的方式——容易出错,并且任何读者都难以理解什么映射到什么。每次与我交谈过的人认为他们需要这样做时,他们都会找到更好的方法。
标签: java data-structures collections