分组,但简洁​​地转换价值要素

时间:2017-10-31 20:08:56

标签: java group-by java-stream

鉴于此分组代码:

List<Input> inputs = getInputs();
Map<LocalDateTime, List<Input>> inputsByDate =
   inputs.stream()
      .collect(
         groupingBy(input -> input.getDateTime()));

改变它的简洁方法是什么,以便我们可以为每个地图键输出List<Output>,我们通过带有签名private Output convertToOutput(Input input) {}的函数运行每个输入?

一个重要的注意事项是Output类没有getDateTime方法,因此必须首先执行,但我们不希望未转换的对象,我们想要转换的对象。

在C#Linq-To-Objects中,它很容易,因为GroupBy方法为您提供Func<TSource, TElement> elementSelector,因此您可以转换值部分。如果没有很多自定义代码,如何在Java中轻松完成?

1 个答案:

答案 0 :(得分:2)

使用Collectors.mapping

// ...
.collect(
    Collectors.groupingBy(
        input -> input.getDateTime()),
        Collectors.mapping(    // <--- This
            TheClass::convertToOutput,
            Collectors.toList());