java - 分组,但简洁​​地变换值元素

标签 java group-by java-stream

给定此分组代码:

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

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

重要的一点是 Output类没有getDateTime方法,因此必须首先执行,但我们不需要未转换的对象,我们需要转换后的对象。

在 C# Linq-To-Objects 中这很容易,因为 GroupBy方法给你 Func<TSource, TElement> elementSelector这样你就可以转换值部分。如何在没有大量自定义代码的情况下用 Java 轻松完成此任务?

最佳答案

使用Collectors.mapping :

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

关于java - 分组,但简洁​​地变换值元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47043744/

相关文章:

java - 我在哪里可以下载 Java comm api?

c# - 如何在 C# 中执行多级聚合?

java - 按集合中的内部集合元素类型分组

java - 在 GAE blobstore java 中创建文件

java - 在android中的微调器中设置默认值

java - 如何在 Spring Boot 应用程序中使用 JPQL 配置 JPA - "can' t 解析符号..”

mysql - 如何查询 mysql 表以获取列的当前值和当天的最大值

sql - 选择列值,其中其他列为组的最大值

java - 您如何对 Java 8 流中的对象列表求和

Java流。提取多个 map 的不同值