filter - Java - Lambda 过滤条件,忽略添加到 map

标签 filter lambda java-8 java-stream

我有一张格式图(引用Finding average using Lambda (Double stored as String))

Map<String, Double> averages=mapOfIndicators.values().stream()
.flatMap(Collection::stream)
.filter(objectDTO -> !objectDTO.getNewIndex().isEmpty())
.collect(Collectors.groupingBy(ObjectDTO::getCountryName,
    Collectors.mapping(ObjectDTO::getNewIndex,
        Collectors.averagingDouble(Double::parseDouble))));

我想忽略整个国家/地区映射,即使其中一个国家/地区的 newIndex 值为空?

最佳答案

由于Collectors.groupingBy不允许跳过组,因此您必须提前分析过滤条件,以便在执行groupBy之前进行过滤或在执行之后过滤 map (我忽略第三个选项,实现您自己的 groupingBy 收集器。

  1. 提前分析:

    Map<String, Boolean> hasEmpty=mapOfIndicators.values().stream()
        .flatMap(Collection::stream)
        .collect(Collectors.groupingBy(ObjectDTO::getCountryName,
            Collectors.mapping(o->o.getNewIndex().isEmpty(),
                Collectors.reducing(false, Boolean::logicalOr))));
    Map<String, Double> averages=mapOfIndicators.values().stream()
        .flatMap(Collection::stream)
        .filter(objectDTO -> !hasEmpty.get(objectDTO.getCountryName()))
        .collect(Collectors.groupingBy(ObjectDTO::getCountryName,
            Collectors.mapping(ObjectDTO::getNewIndex,
                Collectors.averagingDouble(Double::parseDouble))));
    
  2. 过滤结果:

    Map<String, Double> averages=mapOfIndicators.values().stream()
        .flatMap(Collection::stream)
        .collect(Collectors.collectingAndThen(
            Collectors.groupingBy(ObjectDTO::getCountryName,
                Collectors.mapping(ObjectDTO::getNewIndex, Collectors.averagingDouble(
                    s->s.isEmpty()? Double.NaN: Double.parseDouble(s)))),
            m->{ m.values().removeIf(d->Double.isNaN(d)); return m; }));
    

关于filter - Java - Lambda 过滤条件,忽略添加到 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25869821/

相关文章:

c - Altera DE2 的定点和浮点用法?

r - 有条件地选择 dplyr 中特定比例的值为 NA 的列

基于条件和顺序的 Java 8 lambda 过滤

java - 如何从 List<Object> 最佳实践中计算总和 Object.get Item()?

java-8 - 使用java8我们如何从第二个元素开始到最后一个元素排序?

filter - OpenAL同步

Django 模型根据查询字符串进行过滤

c# - Func<string,string> 和 delegate 有什么区别?

java-8 - Java8 Stream - 在单行中使用过滤器收集 foreach

尝试了我能找到的所有方法后,javac 无法被识别(不重复)