【问题标题】:Convert average from lambda stream to Integer将平均值从 lambda 流转换为整数
【发布时间】:2019-02-03 14:04:40
【问题描述】:

我有一张地图,想要一个整数而不是双精度,但我似乎无法将其转换。我的问题似乎是“averagingInt”部分。我得到了正确的值,我只想把它四舍五入。提前谢谢你。

public Map<String,Integer> executeSQL14(){
    return records.stream()
            .filter(p->p.getSource().equals("a") || p.getSource().equals("b"))
            .filter(p->p.getDestination().equals("f") || p.getDestination().equals("h"))
            .filter(p->p.getExtendedSecurityCheck().equals("n"))
            .collect(Collectors.groupingBy(Record::getDestination, Collectors.averagingInt(Record::getWeight)));
}

【问题讨论】:

  • 如果此方法正在处理来自 SQL 查询的结果,也许您应该直接在 SQL 中而不是 Java 中进行所有过滤和聚合。只是说。
  • 请分享您期望的结果
  • 有什么问题? Record::getWeight 返回的是双精度而不是整数?你可以改成Collectors.averagingInt(r -&gt; (int) r.getWeight())
  • @Eran getWeight() 返回一个 int 但方法 averagingInt 产生一个双精度值。可悲的是,我无法让它与您的代码一起使用。那么它无法解析方法“getWeight”。
  • @ÓscarLópez 这是一个学习 lambda 流的练习,所以我尝试用它来做所有事情。

标签: java lambda java-stream collectors


【解决方案1】:

您可以使用替代 toMap 作为:

public Map<String,Integer> executeSQL14(List<Record> records) {
    return records.stream()
            .filter(p -> p.getSource().equals("a") || p.getSource().equals("b"))
            .filter(p -> p.getDestination().equals("f") || p.getDestination().equals("h"))
            .filter(p -> p.getExtendedSecurityCheck().equals("n"))
            .collect(Collectors.toMap(Record::getDestination, Record::getWeight, (a, b) -> (a + b) / 2));
}

或者可能使用collectingAndThen 执行额外的整理操作:

public Map<String,Integer> executeSQL14(List<Record> records) {
    return records.stream()
            .filter(p -> p.getSource().equals("a") || p.getSource().equals("b"))
            .filter(p -> p.getDestination().equals("f") || p.getDestination().equals("h"))
            .filter(p -> p.getExtendedSecurityCheck().equals("n"))
            .collect(Collectors.groupingBy(Record::getDestination, 
                    Collectors.collectingAndThen(Collectors.averagingInt(Record::getWeight), Double::intValue)));
}

【讨论】:

  • 我尝试了两种解决方案,第二个是我的问题的解决方案。非常感谢!
猜你喜欢
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 2019-12-20
相关资源
最近更新 更多