Java流进程顺序
我相信对我来说,一步一步地写下我要做的事情,并复制到目前为止的代码,而不是试图用一篇长的文本来解释它,会更容易 这就是我要做的:Java流进程顺序,java,sorting,java-8,java-stream,collectors,Java,Sorting,Java 8,Java Stream,Collectors,我相信对我来说,一步一步地写下我要做的事情,并复制到目前为止的代码,而不是试图用一篇长的文本来解释它,会更容易 这就是我要做的: 逐行读取文件 在这些行中映射关键点 按1键(下面代码中的getUri)和(获取另一个键的平均值(getRequestDuration))合并行 按合并getRequestDuration的平均值排序(最高优先) 返回n个最高值 这就是我现在得到的: try(Stream<String> logs = Files.lines(Paths.get(args))
try(Stream<String> logs = Files.lines(Paths.get(args))) {
logs.map(LogLine::parseLine).limit(10).sorted((e1, e2) -> Integer.compare(e1.getRequestDuration(),
e2.getRequestDuration()))
.collect(Collectors.groupingBy(
LogLine::getUri,
Collectors.averagingDouble(LogLine::getRequestDuration)));
return logs;
try(流日志=Files.line(path.get(args)){
logs.map(LogLine::parseLine).limit(10).sorted((e1,e2)->Integer.compare(e1.getRequestDuration(),1),
e2.getRequestDuration())
.collect(收集器.groupingBy(
LogLine::getUri,
收集器.averagingDouble(LogLine::getRequestDuration));
返回日志;
我是Java新手,所以我有几个问题希望有人能回答我:
我不一定是在寻找我所面临问题的完整代码,而不是那些能为我提供理解如何做到这一点所需信息的人。如果有人能写出如何以正确的方式使用流解决此类问题,我将不胜感激。您可以在下面尝试,按URI分组,并将平均持续时间作为值,从结果映射按值排序并限制预期结果的数量
Map<String, Double> uriDurationMap = logs.map(LogLine::parseLine).collect(Collectors.groupingBy(LogLine::getUri,Collectors.averagingDouble(LogLine::getRequestDuration)));
如果只需要值
List<Double> filteredList = uriDurationMap.values().stream().sorted().limit(10).collect(Collectors.toList());
List filteredList=uriDurationMap.values().stream().sorted().limit(10.collector.toList());
您可以在下面尝试,从结果映射中按URI分组,并将平均持续时间作为值进行排序,并限制预期结果的数量
Map<String, Double> uriDurationMap = logs.map(LogLine::parseLine).collect(Collectors.groupingBy(LogLine::getUri,Collectors.averagingDouble(LogLine::getRequestDuration)));
如果只需要值
List<Double> filteredList = uriDurationMap.values().stream().sorted().limit(10).collect(Collectors.toList());
List filteredList=uriDurationMap.values().stream().sorted().limit(10.collector.toList());
代替比较器。比较(Map.Entry::getValue)
,你可以使用Map.Entry.comparingByValue()
@Holger哦,我不知道这个增强,谢谢你代替比较器。比较(Map.Entry::getValue)
,你可以使用Map.Entry.comparingByValue()
@Holger哦,我不知道这个增强功能,谢谢