java - 什么是强制 Streams.zip 遍历每个元素的最佳方法(使用 Guava,Java)
问题描述
我正在尝试使用 Streams.zip 创建地图。我不关心流返回的结果,我只需要为每个元素执行 lambda。这是我的代码
String x[] = {"a", "b"};
String y[] = {"c", "d"};
var data = new HashMap<String, String>();
var myStream = Streams.zip(Arrays.stream(x), Arrays.stream(y),
(arg1, arg2) -> { data.put(arg1, arg2); return 0; };
var result = myStream.collect(Collectors.toList()); // ideally don't want this line
如果没有 collect( ) 行,我不会填充地图,那么最简单的方法是什么,我尝试了 count() 而不是 collect,但这完全缩短了 zip。还是有没有 Streams.zip 的更简单的单行解决方案来从两个列表中填充地图?
解决方案
您应该Streams#forEachPair
改用:
String x[] = {"a", "b"};
String y[] = {"c", "d"};
var data = new HashMap<String, String>();
Streams.forEachPair(Arrays.stream(x), Arrays.stream(y), data::put);
System.out.println(data); // {a=c, b=d}
显然如果你不需要控制HashMap,你可以只收集:
String x[] = {"a", "b"};
String y[] = {"c", "d"};
var result = Streams.zip(Arrays.stream(x), Arrays.stream(y), Maps::immutableEntry)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(result); // {a=c, b=d}
推荐阅读
- angular - 主从角度材质示例
- node.js - 如何使用 cPanel 在 GoDaddy VPS 上部署 Node JS 应用程序?一步一步的过程将受到高度赞赏
- hibernate - Hibernate:当没有物理列或值用于区分实例时,鉴别器列如何工作?
- jquery - 如何对数据表进行排序(bDestroy)并添加合并单元格功能
- reactjs - 如何更改箭头并在反应选择中放置一个三角形而不是它,当悬停改变颜色时?
- reactjs - 如何从 Chrome 开发工具源中隐藏代码?
- java - 我应该如何在现有父级的基于一对多注释的映射中执行更新操作?
- javascript - 避免使用带有 React+Redux 的 array.map 重新渲染组件
- javascript - Rails Uncaught TypeError: $(...).owlCarousel 不是函数
- javascript - Typescript:让模块解析(路径/基础)、动态导入和 resolveJsonModule 协同工作