如何使用 Java 中的流创建两个数组的映射?

假设我有两个数组Double

Double[] a = new Double[]{1.,2.,3.};
Double[] b = new Double[]{10.,20.,30.};

使用 Java Streams,如何创建一个Map<Double,Double> myCombinedMap;将两个数组组合在一起的映射(),例如通过以下方式:

System.out.println(myCombinedMap);
{1.0=10.0, 2.0=20.0, 3.0=30.0}

我想我正在寻找类似于带有 Java 流的 Python zip的东西,或者一个优雅的解决方法。


吃鸡游戏
浏览 120回答 3
3回答

MM们

使用IntStream并收集到地图:IntStream.range(0,&nbsp;a.length) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.boxed() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(toMap(i&nbsp;->&nbsp;a[i],&nbsp;i&nbsp;->&nbsp;b[i]));

海绵宝宝撒

为了完整起见,如果你不喜欢拳击IntStream(感觉没有必要),你可以这样做,例如:    Double[] a = new Double[]{1.,2.,3.};    Double[] b = new Double[]{10.,20.,30.};    Map<Double, Double> myMap = IntStream.range(0, a.length)            .collect(HashMap::new, (m, i) -> m.put(a[i], b[i]), Map::putAll);    System.out.println(myMap);该片段的输出是:{1.0=10.0, 2.0=20.0, 3.0=30.0}

森林海

我们可以使用提供索引的Collectors.toMap()from来做到这一点:IntStreamDouble[] a = new Double[]{1.,2.,3.};Double[] b = new Double[]{10.,20.,30.};Map<Double, Double> map =&nbsp;IntStream.range(0, a.length)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //If you array has null values this will remove them&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.filter(idx -> a[idx] != null && b[idx] != null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.mapToObj(idx -> idx)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.collect(Collectors.toMap(idx -> a[idx], idx -> b[idx]));我们还可以将 映射IntStream到对象流Map.Entry<Double, Double>,然后使用Collectors.toMap():Double[] a = new Double[]{1.,2.,3.};Double[] b = new Double[]{10.,20.,30.};Map<Double, Double> map =&nbsp;IntStream.range(0, a.length)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(idx -> a[idx] != null && b[idx] != null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .mapToObj(idx -> new AbstractMap.SimpleEntry<Double, Double>(a[idx], b[idx]))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java