如何在java 8中对数据流应用过滤器后获取整个列表

时间:2017-12-13 06:26:48

标签: java java-stream

如何在java 8中对数据流应用过滤器后获取整个列表: 就像我有整数列表和应用过滤器一样,下面的代码片段只给出了过滤后的数据,但我想要在更改后的整个列表:

我想让gradeListMod包含gradeList的所有值,只有几个过滤器:如果gradeList包含大于38的值且不是5的倍数,则将其四舍五入为5的倍数。然后返回包含所有值的列表

    ex: if list has 35,67,89,30 
    then I want gradeListMod filled with : 35,70,90,30

List<Integer> gradeListMod= gradeList.stream().filter(mark->mark>38)
                          .filter(mark->(mark%5))
                          .map(mark->mark+(5-mark%5))
                          .collect(Collectors.toList());

1 个答案:

答案 0 :(得分:0)

对于您要做的事情,您只需要一个map方法。 filter不适用于此处,因为您无法在以后的管道中获取已过滤的商品。

map方法中,您应该使用old-school if语句来检查条件。

gradeList.stream().map(mark -> {
    if (mark > 38 && mark % 5 != 0) {
        return mark+(5-mark%5);
    } else {
        return mark;
    }
}).collect(Collectors.toList());