函数编程及Stream流计算

函数编程及Stream流计算

常用函数编程接口

函数式接口 参数类型 返回类型 用途
Consumer
消费型接口
T void 对类型为T的对象应用操作,包含方法:void accept(T t)
Supplier
供给型接口
T 返回类型为T的对象,包含方法:T get()
Funciton<T,R>
函数型接口
T R 对类型为T的对象应用操作,并返回结果,包含方法:R apply(T t)
Predicate
断定型接口
T boolean 确定类型为T的对象是否满足某约束条件,包含方法:boolean test(T t)

常用函数编程案例

public static void main(String[] args) throws Exception {
    Function<String,String> f = t ->  t+"你好";
    System.out.println(f.apply("溪风"));

    Consumer<String> c = t -> System.out.println(t+"你好啊");
    c.accept("溪风");

    Supplier s = () -> "溪风你好啊";
    System.out.println(s.get());

    Predicate<Integer> p = t -> {
        if(t>=18){
            return true;
        }
        return false;
    };
    System.out.println("是否成年?"+p.test(18));
}

stream流计算

stream特点

  1. stream自己不会存储元素
  2. stream不会改变源对象。相反他们会返回一个持有结果的新stream
  3. stream操作时延迟执行的。这意味着他们会等到需要结果的时候才执行

stream执行阶段

​ 源头=》中间流水线=》结果

  1. 创建一个stream:一个数据源(数组、集合)
  2. 中间操作:处理数据源数据
  3. 终止操作:执行中间操作链,产生结果

小小案例

public static void main(String[] args) throws Exception {
    Integer [] arr = {1,3,5,6,7,8,3,9,13,5};
    //数据过滤案例
    Arrays.stream(arr)
        //只需要%2等于0的数据
        .filter(t -> t%2 == 0)
        //输出
        .forEach( on -> System.out.println(on));
    //将数组的元素乘以2生成新的list集合并降序排序,只取一个值
    List<Integer> collect = Arrays.stream(arr).map(t -> t * 2).
        		//降序排序
                sorted( (o1,o2) -> o2.compareTo(o1) ).
        		//取的数值
                limit(1).
        		//生成新的集合
                collect(Collectors.toList());
    collect.stream().forEach(System.out::println);
}
posted @ 2021-09-12 17:18  幸运刘  阅读(59)  评论(0)    收藏  举报