首页 > 解决方案 > 如何将这种传统的 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,然后将其反转,然后再转换回字符串。最后我把索引和字符串放到地图上。但我想不出一种方法来使用纯流跟踪所有这些。有人可以启发我吗?谢谢!

标签: javajava-stream

解决方案


它可以通过模仿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
    ));

推荐阅读