使用流来汇总存储在map中的数组中的所有值

Mic*_*cki 1 java java-8 java-stream

我有一张看起来像这样的地图:

Map<String,String[]> urlFormEncoded = new HashMap<String,String[]>();
Run Code Online (Sandbox Code Playgroud)

我想将存储在String []数组中的所有值作为double值求和,我试过这样的事情:

double requestAmount = urlFormEncoded.entrySet().stream().mapToDouble(k -> Arrays.stream(k.getValue()).).sum();
Run Code Online (Sandbox Code Playgroud)

但不幸的是我不知道如何将此String []转换为值:(我想使用流和lambda表达式来做到这一点

Ale*_* C. 8

第一步是将每个转换String[]为a DoubleStream.

Arrays.stream(arr).mapToDouble(Double::valueOf)
Run Code Online (Sandbox Code Playgroud)

然后你必须得到flatMap那些流来获得单个DoubleStream所有double值.

.flatMapToDouble(arr -> Arrays.stream(arr).mapToDouble(Double::valueOf))
Run Code Online (Sandbox Code Playgroud)

所以你最终得到:

double requestAmount = 
    urlFormEncoded.values()
                  .stream()
                  .flatMapToDouble(arr -> Arrays.stream(arr).mapToDouble(Double::valueOf))
                  .sum();
Run Code Online (Sandbox Code Playgroud)

请注意,entrySet()如果您计划仅对值进行操作,则无需使用,您可以直接使用values().