构建最大值的列表,从嵌套拉姆达嵌套的地图内的一组名单

斯特凡诺:

我是新来的Java 8,我需要重写旧的代码来实现新的alghoritm。该任务是过滤它针对每个列表最大速度的对象。列表是嵌套的内部地图:道路的根部地图,其中包含路段的地图和道路段的每个映射包含对象的列表,每一个在一个时间间隔测量decribing速度。我需要找到每个列表中所有的最高速度。

我发现下面的链接,它看起来像我的问题,但我无法适应他们,我不知道我的努力正确地解决我的问题。

你如何筛选使用Java 8流和过滤器嵌套循环?

Java的8过滤地图<字符串,列表<员工>>

在地图上的地图过滤器

这是我作为例子来写我的代码


Map<String, Map<String, Employee>> employeeMap =
                            employeeMap.entrySet()
                                       .stream()
                                       .collect(toMap(Map.Entry::getKey,
                                                      e -> e.getValue().entrySet().stream()
                                                      .filter(emp -> !emp.getValue().getState().equals("MI"))
                                                      .collect(toMap(Map.Entry::getKey, Map.Entry::getValue))));


for(Car car : cars) {
                        for (Engine engine : car.getEngines()) {
                            for (Part part : engine.getParts()) {
                                // ...
                            }
                        }
                    }


                    cars.stream()
                        .flatMap(car -> car.getEngines().stream())
                        .flatMap(engine -> engine.getParts().stream())
                        .forEach(part -> {  ... });


这是我的最终代码



Map<Integer, Map<Integer, List<PartialSpeed>>> speedsPerRoadPerSegment; 


ArrayList<PartialSpeed> maxSpeedPerSegment = new ArrayList<PartialSpeed>();
                    speedsPerRoadPerSegment.entrySet().stream()
                            .forEach(road-> road.getValue().entrySet()
                            .stream()
                            .forEach(segment ->
                            {
                                Optional<PartialSpeed> result = segment.getValue().stream()
                                .max(Comparator.comparing(PartialSpeed::getnVelFfs));
                                maxSpeedPerSegment.add(result.get());
                            }));


我所有的努力,坚持榜样会不被认可有关结果类型的问题。这是最好的(不工作)我是已经能够实现:

speedsPerRoadPerSegment.entrySet().stream()
                            .flatMap(road-> road.getValue().entrySet()
                            .stream().flatMap(
                                    segment -> segment .getValue()
                                    .stream()
                                    .max(Comparator.comparing(PartialSpeed::getnVelFfs))
                                    ));

正如你可以看到我刚刚取代了旧与foreaches循环。我想了解如何直接从lambda表达式获得最大的元素列表。

霍尔格:

一般情况下,你是否使用循环或流处理的时候Map,你应该选择正确的集合视图,keySet()entrySet(),或者values(),这取决于哪些元素实际需要。由于您只在值感兴趣的话,请不要使用entrySet()

然后,应用正确的终端操作流,以获得最终的结果:

List<PartialSpeed> maxSpeedPerSegment =
    speedsPerRoadPerSegment.values().stream()
        .flatMap(m -> m.values().stream())
        .map(list -> Collections.max(list, Comparator.comparing(PartialSpeed::getnVelFfs)))
        .collect(Collectors.toList());

此用途Collections.max,而不是一个嵌套的流操作,如果集合为空时将抛出一个异常(就像调用get()上的Optional无条件的都行)。

如果可能发生空列表,你可以前手进行筛选:

List<PartialSpeed> maxSpeedPerSegment =
    speedsPerRoadPerSegment.values().stream()
        .flatMap(m -> m.values().stream())
        .filter(list -> ! list.isEmpty())
        .map(list -> Collections.max(list, Comparator.comparing(PartialSpeed::getnVelFfs)))
        .collect(Collectors.toList());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在嵌套列表中查找最大值

在嵌套地图内的列表中添加和删除值会影响所有嵌套地图

如何找到一组变量的最大值

在一组数据中寻找局部最大值

从一组行中获取最大值

在嵌套列表中查找列表的最大值

从嵌套列表中获取最大值并使用流转换为一个列表

使用 matplotlib 和 numpy 查找一组局部最大值的最大值

在嵌套列表中搜索最大值和索引

如何计算嵌套列表中局部最大值的数量?

如何获取列表的嵌套字典中键的最大值

在R的嵌套列表中查找最大值

通过嵌套列表中元素的索引找到嵌套列表的最小值和最大值

使用嵌套字典映射一组列中的值

排序的ArrayList对象的值,并且在一个拉姆达打印它们的多个

Excel:使用什么公式返回一组查找值的最小值或最大值?

查找巨大的ascii文件中包含的最大值和一组最大值(以科学计数法表示)

给定一组显示嵌套路径的键,以更改关联数组中的嵌套值

java的拉姆达 - 如何遍历自选的可选列表/流

dplyr:一组中的最大值,不包括每行中的值?

获取一组字符串中的最大值和最小值

在一组列中查找最大值,并在相应行中检索值

LINQ在较大的集合中找到一组值的最大值

z3py中一组变量的最大值和最小值

如何在 SQL 中获取一组行的最小值和最大值?

获取嵌套字典的最大值

在嵌套哈希中找到最大值

“挤压”一组嵌套对象?

爪哇拉姆达和HashMap <布尔值,对象>