首页 > Java > java教程 > 如何使用 Java 8 流有效地将列表转换为地图?

如何使用 Java 8 流有效地将列表转换为地图?

DDD
发布: 2024-12-28 13:16:10
原创
531 人浏览过

How Can I Efficiently Translate Lists to Maps Using Java 8 Streams?

使用 Java 8 Streams 将列表高效地转换为映射

在 Java 8 中,一个常见的任务是使用流和 lambda 将对象列表转换为映射。这可以通过多种方式实现,具体取决于所需的行为以及 Guava 等第三方库的可用性。

Java 7 及以下方法

传统上,映射地图列表涉及手动迭代和手写循环:

private Map<String, Choice> nameMap(List<Choice> choices) {
    final Map<String, Choice> hashMap = new HashMap<>();
    for (final Choice choice : choices) {
        hashMap.put(choice.getName(), choice);
    }

    return hashMap;
}
登录后复制

基于番石榴解决方案

Guava 提供了一种方便的方法 Maps.uniqueIndex,用于根据指定的键提取器从列表生成地图。

Guava with Java 7

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, new Function<Choice, String>() {

        @Override
        public String apply(final Choice input) {
            return input.getName();
        }

    });
}
登录后复制

Guava 与 Java 8 Lambda

利用 Java 8 lambda 进一步简化了代码:

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, Choice::getName);
}
登录后复制

救援的收集器

Java 8 的 Collectors 类提供将列表映射到地图的强大实现。 toMap 收集器有两个参数:

  • 键提取器函数(检索每个元素的键的函数)
  • 值提取器函数(检索每个元素的值的函数) element)

在这种情况下,我们可以使用 Choice::getName 和 Function.identity() 来检索键和值,分别是:

Map<String, Choice> result =
    choices.stream().collect(Collectors.toMap(Choice::getName,
                                              Function.identity()));
登录后复制

以上是如何使用 Java 8 流有效地将列表转换为地图?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板