java - 如何将这种传统的 for 循环转换为 Java 流?
问题描述
我最近在学习 Java 流,并尝试通过转换我以前的一些代码片段来练习一些流功能。程序中的以下传统for循环是将原始数组中的索引及其反转字符串存储到映射中。
String[] words = {"hey", "there", "how", "are", "you"};
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < words.length; i++) {
String rev = new StringBuilder(words[i]).reverse().toString();
map.put(rev, i);
}
但是,我很难使用纯流来实现同样的目标。我认为我遇到的问题是如何同时跟踪索引和反向字符串。从传统的 for 循环中可以看出,我将字符串转换为 stringbuilder,然后将其反转,然后再转换回字符串。最后我把索引和字符串放到地图上。但我想不出一种方法来使用纯流跟踪所有这些。有人可以启发我吗?谢谢!
解决方案
它可以通过模仿for
循环的 IntStream 来完成:
Map<String, Integer> map = IntStream.range(0, words.length).boxed()
.collect(Collectors.toMap(
i -> new StringBuilder(words[i]).reverse().toString(), // key: reversed string
i -> i // value: index in array
));
推荐阅读
- amazon-web-services - AWS 使用负载均衡器设置 DNS
- swift - NSCollectionView:如何防止右键选择?
- react-native - (Android) 有没有办法在 App 不运行时从 HeadlessJS React Native 启动 App?
- javascript - 在 html div 中显示函数的结果
- google-analytics - 谷歌标签管理器、Cookiebot 和谷歌分析:在标签中从“页面视图”切换到“窗口加载”跟踪类型的后果是什么?
- asp.net-core - 在 Razor 视图中填充 selectlistitem 时同步等待 NULL 引用异常
- java - 读取超过 9 万条记录的 excel 文件时出现内存不足异常
- mysql - 如何在mysql中使用union合并同一张表
- mysql - MYSQL 按日期分组并计算第一个日期
- python - 如何更改图例中的行数?