当前位置: 首页 > 知识库问答 >
问题:

通过聚合和分组将一个对象映射到另一个对象

慕迪
2023-03-14

通过聚合和分组将一个对象映射到另一个对象

class Q {
    String username;
    int taskId;
    double timediff;

   // constructor
}
 class ToQ {
        String username;
        int noOfTasks;
        double sum;

       // constructor
    }
List<Q> qs = new ArrayList<>();
    qs.add(new Q("tom", 2, 2.0));
    qs.add(new Q("tom", 6, 1.0));
    qs.add(new Q("harry", 8, 0.03));

ToQ的输出应为

new ToQ("tom",2,3);
new ToQ("harry",1,0.03);

我尝试使用分组函数,但它生成了HashMap但不确定如何转换为对象。

Map<String, Double> collect = qs
            .stream()
            .collect(groupingBy(Q::getUsername, summingDouble(Q::getLocalDateTime)));

共有1个答案

孟楷
2023-03-14

您可以按照以下方式执行:

Map<String, Double> nameToTimeDiffSumMap = qs.stream()
        .collect(Collectors.groupingBy(Q::getUsername, 
                Collectors.summingDouble(Q::getTimediff)));
Map<String, Long> nameToCountMap = qs.stream()
        .collect(Collectors.groupingBy(Q::getUsername, 
                Collectors.counting()));
List<ToQ> toQS = qs.stream().map(a -> 
        new ToQ(a.getUsername(), nameToCountMap.get(a.getUsername()), nameToTimeDiffSumMap.get(a.getUsername())))
        .collect(toList());

它假设类具有getter和setter以及适当的构造函数

class ToQ {
    String username;
    long noOfTasks;
    double sum;
}

class Q {
    String username;
    int taskId;
    double timediff;
}
 类似资料:
  • 我有以下数据结构: <代码>地图 我想从这个复杂的 Map 对象中提取它的值(它本身是另一个字符串 Map)。我目前正在这样做: 上面的实现给了我一个新的Map对象,由于外部循环,它正在迭代。似乎我错过了什么。 如何从复杂的 Map 对象中提取内部 Map 对象? 编辑: 回应AlexWien的评论 原始数据结构: 原始数据结构背后的原因是为一对id(ID1和ID2)存储一个值。ID1和ID2可以

  • 我有Object1和Object2。现在,我想映射对象3,属性来自1 比方说,我有两个目标: 现在,有了这些,我想把它映射进去 哪里,first_name 现在,我的问题是,怎么做? 然而,目前,我正在这样做 但是,在这里,我必须在addressToView()中手动编写映射。 因此,有没有办法避免这种情况? 或者,处理此类情况的首选方式是什么?

  • 我必须用不同的键和值将rest模板响应映射到我的DTO。目前我正在从rest api获得这个json响应 我想将其映射到我的 DTO 中,以便能够保存到数据库中 我想要的是只获得相同的动态密钥,以匹配上述api的响应。目前我正在这样做,但似乎我没有设置相同键的正确值。 执行此操作后,我的数据库中出现空值。

  • 我在一个Apache Flink项目中遇到了以下情况。 具有不同对象的3个流,例如 Person->字符串id,字符串firstName,字符串lastName(即101,John,Doe) PersonDetail->字符串id,字符串地址,字符串城市,字符串电话号码,long personId(即99,Stefansplatz 1,+43066012345678,101) PersonAddD

  • 问题内容: 我可以使用通用的特定于Javascript / Coffeescript的习惯用法吗?主要出于好奇。 我有两个数组,一个数组由所需的键组成,另一个数组由所需的值组成,我想将其合并到一个对象中。 问题答案: var r = {}, i, keys = [‘one’, ‘two’, ‘three’], values = [‘a’, ‘b’, ‘c’];

  • 我有一个像这样的对象: 我需要从转换为,所以我尝试了以下方法: 这显然是在上给了我一个错误,因为在类上没有具有单个的构造函数 如何映射的两个属性来创建新的,然后将所有这些属性收集到