使用流将数组转换为映射

use*_*862 0 java lambda stream

我有一个整数列表, [1,2,3,4,5]我想在应用乘法函数 (*5) 后将其转换为映射,如下所示:

 {1 = 5, 2 = 10, 3 = 15, 4 = 20, 5 = 25}
Run Code Online (Sandbox Code Playgroud)

我能够使用流并使用 map 函数来执行乘法,但我对如何将结果转换为 map 感到困惑。

myList.stream().map(n -> n * 5).collect( ... )
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗。

Era*_*ran 5

您当前的流管道将原始值转换为新值,因此您无法将其收集到Map同时包含原始值和新值的 。

如果不是在 中map使用.collect(Collectors.toMap())和执行乘法,则可以实现它toMap()

Map<Integer,Integer> map =
    myList.stream()
          .collect(Collectors.toMap(Function.identity(),
                                    n -> n * 5));
Run Code Online (Sandbox Code Playgroud)

在您仍然想使用 时map,您可以通过将每个值转换为一个来保留原始值Map.Entry

Map<Integer,Integer> map =
    myList.stream()
          .map (n -> new SimpleEntry<> (n, n * 5))
          .collect(Collectors.toMap(Map.Entry::getKey,
                                    Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)