将平均值从 lambda 流转换为整数

Convert average from lambda stream to Integer

我有一张地图,想要一个整数而不是双精度数,但我似乎无法将其转换。我的问题似乎是 '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)));
}

您可以使用替代方案 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)));
}