Java 使用流对存储在映射中的数组中的所有值求和
我有一张这样的地图:Java 使用流对存储在映射中的数组中的所有值求和,java,java-8,java-stream,Java,Java 8,Java Stream,我有一张这样的地图: Map<String,String[]> urlFormEncoded = new HashMap<String,String[]>(); double requestAmount = urlFormEncoded.entrySet().stream().mapToDouble(k -> Arrays.stream(k.getValue()).).sum(); 但不幸的是,我不知道如何将此字符串[]转换为值:( 我想使用streams和la
Map<String,String[]> urlFormEncoded = new HashMap<String,String[]>();
double requestAmount = urlFormEncoded.entrySet().stream().mapToDouble(k -> Arrays.stream(k.getValue()).).sum();
但不幸的是,我不知道如何将此字符串[]转换为值:(
我想使用streams和lambda表达式来实现这一点第一步是将每个
字符串[]
转换为双流
Arrays.stream(arr).mapToDouble(Double::valueOf)
然后您必须flatMap
这些流才能获得单个DoubleStream
将所有值加倍
.flatMapToDouble(arr -> Arrays.stream(arr).mapToDouble(Double::valueOf))
因此,你最终会:
double requestAmount =
urlFormEncoded.values()
.stream()
.flatMapToDouble(arr -> Arrays.stream(arr).mapToDouble(Double::valueOf))
.sum();
请注意,如果计划只处理值,则不需要使用entrySet()
,您可以直接使用values()
第一步是将每个字符串[]
转换为双流
Arrays.stream(arr).mapToDouble(Double::valueOf)
然后您必须flatMap
这些流才能获得单个DoubleStream
将所有值加倍
.flatMapToDouble(arr -> Arrays.stream(arr).mapToDouble(Double::valueOf))
因此,你最终会:
double requestAmount =
urlFormEncoded.values()
.stream()
.flatMapToDouble(arr -> Arrays.stream(arr).mapToDouble(Double::valueOf))
.sum();
请注意,如果计划只处理值,则无需使用entrySet()
,可以直接使用values()