我试图将两个列表合并到一个MAP中。 两个列表大小不相等。
Map<String, String> finalMap = new HashMap<String, String>();
List<String> names = new ArrayList<String>();
names
列表包含seloger ,france24,sports,tupple,hentry
List<String> location = new ArrayList<String>();
location
列表仅包含值spain ,france
。
我正在尝试创建这样的地图。
finalMap.put("seloger", "spain" );
finalMap.put("france24", "france" );
finalMap.put("sports", null );
finalMap.put("tupple", null );
finalMap.put("hentry", null);
这是我使用的代码
Iterator<String> names = names .iterator();
Iterator<String> locations= location .iterator();
for (names .hasNext();;) {
String tag = locations.next();
tag = null != tag ? tag : null;
finalMap .put(names .next(), tag);
}
此处无法插入到finalMap
,因为我获得了nosuchElementException
。如何为locations.next()插入null
值不包含值
答案 0 :(得分:1)
您应该检查locations
迭代器是否具有下一个元素
if (locations.hasNext()) {
tag = locations.next();
} else {
tag = null;
}
答案 1 :(得分:0)
尝试像这样插入
finalMap.put("sports", "");
答案 2 :(得分:0)
由于Map
的每个条目都必须有一个键而不是一个值,因此您可能只需迭代直到names
完成然后停止,因为没有键的其他值可以&#39;存储:
for (int i = 0; i < names.size(); i++) {
finalMap.put(names.get(i), i < location.size() ? location.get(i) : null);
}
答案 3 :(得分:0)
如果名称或位置可能很短:
Map<String, String> finalMap = new HashMap<String, String>();
List<String> name = new ArrayList<String>();
List<String> location = new ArrayList<String>();
// ....
Iterator<String> names = name.iterator();
Iterator<String> locations= location.iterator();
while (names.hasNext() && locations.hasNext()) {
finalMap.put(names.next(), locations.next());
}
while (names.hasNext()) {
finalMap.put(names.next(), null);
}
while (locations.hasNext()) {
finalMap.put(null, locations.next());
}
答案 4 :(得分:0)
public static void main(String[] args) {
List<String> names = Arrays.asList("seloger", "france24", "sports", "tupple", "hentry");
List<String> location = Arrays.asList("spain", "france");
Map<String, String> map = new HashMap<String, String>();
Iterator<String> i = location.iterator();
for (String name : names) {
String value = i.hasNext() ? i.next() : null;
map.put(name, value);
}
System.out.println(map);
}
理想情况下,您可以使用zip或zipWith来组合这两个列表。不幸的是,JDK 8似乎没有那个,所以你必须做必要的代码。
我运行了上面的代码。它可以为您提供所需的结果。