将两个列表分别转换为新映射的键和值

时间:2015-02-17 16:15:30

标签: java list dictionary data-structures apache-commons

执行此操作的代码非常简单:

Map<K, V> listsToMap(List<K> keys, List<V> values) {
    // check preconditions - sizes
    Map<K, V> map = new HashMap<>();
    for ( int i = 0; i < keys.size(); i++) {
        map.put(keys.get(i), values.get(i));
    }
}

我的问题是:这是否存在于最常见的Java库之一?这将是标准库,包括Java 7或Java 8,Apache Commons或Guava。我在这里问,因为到目前为止我还没有在谷歌搜索中找到它,因此,添加一个带有我用过的最佳关键词的SO问题将帮助下一个遇到同样问题的人。

1 个答案:

答案 0 :(得分:0)

这些库中只有一个功能不完美,而且它在Guava的Maps.uniqueIndex中。您可以在Apache commons的MapUtils中看到它。

注意这个功能

  • 实际上并不支持两个列表,所以它不必担心不同的长度列表
  • 如果尝试重复键,则抛出异常

任何完成这项工作的功能都必须对这两个条件采取立场。此外,如果支持两个列表,则该函数必须对不同大小的列表采取立场,抛出异常或丢失值等。

此外还有一个问题是&#34;重复键&#34;手段。特别是如果(k,v)被插入两次就可以吞下吗?

所以任何一个函数都必须回答所有这些问题。因此,您实际上正在寻找KeyValueListsToMapFunctionBuilder.

Java中的声明性编程尚处于起步阶段。如果它是成熟的,那么确切地说是一个&#34;关键值列表来映射函数构建器&#34;会存在,如果真的成熟,它会有一个简洁的名称和界面。然而,大多数Java仍然是必不可少的,并且通过自己编写这个函数 - 就像在OP代码中一样 - 你必须在所有这些选择中做出必要的修改,就像你必须声明的那样。所以,最后

  • 有一个体面的功能可以在最佳情况下工作,并决定如何处理错误输入
  • 任何更通用的都会有复杂的配置
  • &#34;声明&#34; Java生态系统并不十分成熟,因此您必须自己强制实施复杂的配置,即只需编写代码即可。