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

时间:2015-07-22 09:23:30

标签: java java-8 java-stream

我有一张如下所示的地图:

Map<String,String[]> urlFormEncoded = new HashMap<String,String[]>();

我希望将存储在String []数组中的所有值加总为double值 我试过这样的事情:

double requestAmount = urlFormEncoded.entrySet().stream().mapToDouble(k -> Arrays.stream(k.getValue()).).sum();

但遗憾的是我不知道如何将此String []转换为值:( 我想使用流和lambda表达式

来做到这一点

1 个答案:

答案 0 :(得分:8)

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

Arrays.stream(arr).mapToDouble(Double::valueOf)

然后,您必须flatMap这些流才能获得所有DoubleStream值的double个。{/ p>

.flatMapToDouble(arr -> Arrays.stream(arr).mapToDouble(Double::valueOf))

所以你最终得到:

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

请注意,如果您打算仅使用值,则不需要使用entrySet(),您可以直接使用values()