gpt4 book ai didi

sorting - Java8 集合中对象属性的流平均值

转载 作者:行者123 更新时间:2023-12-01 09:27:05 25 4
gpt4 key购买 nike

我是 Java 新手,所以如果这个问题已经在其他地方得到了回答,那么我要么不知道足够的信息来搜索正确的东西,要么就是无法理解答案。

所以问题是:我的列表中有一堆对象:

try(Stream<String> logs = Files.lines(Paths.get(args))) {

return logs.map(LogLine::parseLine).collect(Collectors.toList());


}

这就是添加属性的方式:

        LogLine line = new LogLine();
line.setUri(matcher.group("uri"));
line.setrequestDuration(matcher.group("requestDuration"));
....

如何对日志进行排序,以便最终得到具有相同“uri”的对象在平均请求持续时间内仅显示一次的列表。

示例:

         object1.uri = 'uri1', object1.requestDuration = 20;
object2.uri = 'uri2', object2.requestDuration = 30;
object3.uri = 'uri1', object3.requestDuration = 50;

结果:

        object1.uri = 'uri1', 35;
object2.uri = 'uri2', 30;

提前致谢!

最佳答案

看看Collectors.groupingByCollectors.averagingDouble 。对于您的情况,您可以按如下方式使用它们:

Map<String, Double> result = logLines.stream()
.collect(Collectors.groupingBy(
LogLine::getUri,
TreeMap::new,
Collectors.averagingDouble(LogLine::getRequestDuration)));

Collectors.groupingBy 方法可以完成您想要的操作。它是重载的,因此您可以指定返回键的函数来对元素进行分组,创建返回映射的工厂(我在这里使用 TreeMap ,因为您希望条目按键排序,在本例中为 URI),以及下游收集器,该收集器收集与第一个参数返回的键匹配的元素。

如果您想要一个 Integer 而不是 Double 平均值,请考虑使用 Collectors.averagingInt .

这假设 LogLine 具有 getUri()getRequestDuration() 方法。

关于sorting - Java8 集合中对象属性的流平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40422409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com