在 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 收集器有两个参数:
在这种情况下,我们可以使用 Choice::getName 和 Function.identity() 来检索键和值,分别是:
Map<String, Choice> result = choices.stream().collect(Collectors.toMap(Choice::getName, Function.identity()));
以上是如何使用 Java 8 流有效地将列表转换为地图?的详细内容。更多信息请关注PHP中文网其他相关文章!