廖雪峰Java16函数式编程-2Stream-5filter

1.filter简介

Stream.filter()是一个转换方法,把一个Stream转换为另一个Stream。
所谓filter操作,就是对一个Stream的所有元素进行测试,不满足条件的元素就被过滤掉,剩下的元素构成了一个新的Stream
例如对{1, 2, 3, 4, 5}调用filter,传入的测试函数是f(x)=x%2,结果为1,就通过;否则不通过。

实现filter的代码

Stream<Integer> s = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> s2 = s.filter((n)->n%2 ==1);

通过filter操作的Stream,它的元素可能变少

2. filter过程

filter方法接收的对象是Predicate接口对象
Stream filter(Predicate<? super T> predicate);
@FunctionalInterface
public interface Predicate{
//判断元素t是否符合条件
boolean test(T t);
}

##    3. filter示例
```#java
package com.feiyangedu.sample.pop3.SteamStudy;

import java.util.function.Supplier;
import java.util.stream.Stream;

class NatualSupplier implements Supplier {
    long x = 0;
    public Long get(){
        x++;
        return x;
    }
}
public class StreamFilterSample {
    public static void main(String[] args){
        Stream<Long> natural = Stream.generate(new NatualSupplier());
        Stream<Long> odd = natural.filter((n)->n%2==1);
        odd.limit(20).forEach(System.out::println);
    }
}
## 4. 总结: filter方法: * 将一个Stream的每个元素进行测试,通过测试的元素被过滤后生成一个新的Stream * 用于排除不满足条件的元素
原文地址:https://www.cnblogs.com/csj2018/p/11481115.html