鉴于此分组代码:
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中轻松完成?
答案 0 :(得分:2)
// ...
.collect(
Collectors.groupingBy(
input -> input.getDateTime()),
Collectors.mapping( // <--- This
TheClass::convertToOutput,
Collectors.toList());