如何转换Map>映射<字符串,设置<字符串>>使用 forEach 操作
我想将 Map
转换为 Map
以优化搜索。我想出了下面的传统方法。
for (Map.Entry<String, List<String>> entry : this.mapWithList.entrySet()) {
Set<String> hSet = new HashSet<>(entry.getValue());
this.mapWithSet.put(entry.getKey(), hSet);
}
我想知道如何在 Java 8 中使用 forEach
来做到这一点。
另外,使用forEach
lambda,代码性能会更好吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不,不会的。 迭代解决方案通常性能更高。
Stream API中有一个特殊的操作
collect()
,旨在填充一个可变容器 (例如Collection
、StringBuilder
等)与流管道的内容。 文档。当没有其他方法可以实现这一点时,请考虑仅将forEach()
作为最后的手段。要使用
collect()
执行此操作,首先,您需要创建一个条目流。基于每个条目,必须创建一个新条目,
map()
操作用于此目的。静态方法Map.entry()
用于实例化一个新条目。然后通过传递
Collectors.toMap()
作为参数来应用终端操作collect()
,这会创建一个收集器(负责将流元素放入可变容器中的对象,在本例中为映射)基于提供的两个函数(对于< em>按键和值)。main()
输出
No, it'll not. Iterative solutions are usually more performant.
There's a special operation
collect()
in the Stream API that is meant to populate a mutable container (e.g.Collection
,StringBuilder
, etc.) with the contents of the stream pipeline. Usage offorEach()
for that purpose is highly discouraged by the documentation. Consider utilizingforEach()
only as a last resort, when there's no other way to achieve that.To do that with
collect()
, first, you need to create a stream of entries.Based on each entry, a new entry has to be created,
map()
operation is utilized for that purpose. Static methodMap.entry()
is used to instantiate a new entry.And then apply the terminal operation
collect()
by passingCollectors.toMap()
as parameter, which creates a collector (object responsible for placing the stream elements into a mutable container, a map in this case) based on the two provided functions (for keys and values).main()
Output
您可以使用这种方法:
You can use this approach:
使用 gson 的一行解决方案! (或任何其他 JSON 序列化程序)
两个映射都具有相同的 JSON 表示形式。跳出框框思考;)
one line solution using gson! (or any other JSON serializer)
both maps have the same JSON representation. think outside the box ;)