sva*_*605 8 java-8 java-stream collectors
例如,有两个列表:
List<Double> list1 = Arrays.asList(1.0, 2.0);
List<String> list2 = Arrays.asList("one_point_zero", "two_point_zero");
Run Code Online (Sandbox Code Playgroud)
使用Stream,我想创建一个由这些列表组成的映射,其中list1用于键,list2用于值.为此,我需要创建一个辅助列表:
List<Integer> list0 = Arrays.asList(0, 1);
Run Code Online (Sandbox Code Playgroud)
这是地图:
Map<Double, String> map2 = list0.stream()
.collect(Collectors.toMap(list1::get, list2::get));
Run Code Online (Sandbox Code Playgroud)
list0用于list1 :: get和list2 ::开始工作.没有创建list0有没有更简单的方法?我尝试了以下代码,但它不起作用:
Map<Double, String> map2 = IntStream
.iterate(0, e -> e + 1)
.limit(list1.size())
.collect(Collectors.toMap(list1::get, list2::get));
Run Code Online (Sandbox Code Playgroud)
sva*_*rog 16
您可以通过a生成它们,而不是使用辅助列表来保存索引IntStream.
Map<Double, String> map = IntStream.range(0, list1.size())
.boxed()
.collect(Collectors.toMap(i -> list1.get(i), i -> list2.get(i)));
Run Code Online (Sandbox Code Playgroud)
实际上,最好的方法是使用IntStream.range(startInclusive, endExclusive)以便访问两个列表的每个元素,get(index)并最终使用Math.min(a, b)以避免获取IndexOutOfBoundsException列表的大小不完全相同,因此最终的代码将是:
Map<Double, String> map2 = IntStream.range(0, Math.min(list1.size(), list2.size()))
.boxed()
.collect(Collectors.toMap(list1::get, list2::get));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11110 次 |
| 最近记录: |