将两个不同大小的列表组合到一个Map

时间:2017-02-25 04:21:43

标签: java

我试图将两个列表合并到一个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值不包含值

5 个答案:

答案 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似乎没有那个,所以你必须做必要的代码。

我运行了上面的代码。它可以为您提供所需的结果。