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()