Java Streams过滤90%的列表

时间:2018-05-23 11:25:00

标签: java lambda java-stream

我有一个包含活动的文件(开始时间,结束时间和名称)。我必须过滤持有时间少于5分钟的90%监控样本的活动,并将结果收集到仅包含不同活动名称的列表中。

我做了两张地图,一张是活动名称的关键字,另一张是活动名称的值,以及活动名称和关键字的值,以及持续时间不超过5分钟的值。现在我想过滤第一张地图,这样我就可以只列出90%的情况下持续时间少于5分钟的活动。

我不认为这种方法非常好,看起来很可疑+我有一个错误,说map1必须是最终的

 map1 = list.stream().collect(groupingBy(a-> a.getAct(), counting()));
 map2 = list.stream()
        .filter(a-> a.getDuration().toMinutes() <= 5)
        .collect(groupingBy(a-> a.getAct(), counting()));
 list90 = (List) map2.entrySet().stream()
          .filter(a -> a.getValue() == 0.9 * map1.get(a.getKey() ) )
          .map(x->x.getKey())
          .collect(Collectors.toList());

编辑:

错误是

  

在封闭范围内定义的局部变量map1必须是最终的或有效的最终

0 个答案:

没有答案