java初级14(持续更新)

Lambda和Stream

函数式接口
    只有一个必须被重写的抽象方法的接口
    @FunctionalInterface
        注解强制检测是否为函数式接口
    java.util.function包下提供了一系列的函数式接口
    四大内置函数式接口
        Consumer<T> 消费型接口
            void accept(T t) 对给定的参数执行此操作。
                举例
                    每天的缴费记录
                    public static void testComsumer(double money, Consumer<Double> con){
                            con.accept(money);
                        }
        Function<T,R> 函数型接口
            R apply(T t) 将此函数应用于给定的参数。
                举例
                    对一个字符串进行某种行为的操作得到结果
                    public static String strHandler(String str, Function<String,String> fun){
                            return fun.apply(str);
                        }
        Supplier<T> 供给型接口
            T get() 获取结果。
                定义方法
                    1)需求
                    2)参数:  不确定的数据|有可能会改变的数据定义参数列表上
                    3)返回值: 方法执行完毕是否需要得到一个结果,需要定义返回值
                    4)方法名 : 见名知意
                举例
                    提供指定个数的,指定规则的随机整数
                    public static List<Integer> testNumRandom(int num, Supplier<Integer> sup){
                            //定义一个List集合,存储生成的随机数
                            List<Integer> list = new ArrayList<>();
                            //循环num次,每次调用get方法生成一个随机数
                            for(int i=1;i<=num;i++){
                                list.add(sup.get());
                            }
                            //返回结果
                            return list;
                        }
        Predicate<T> 断言型接口
            boolean test(T t) 根据给定的参数计算此谓词。
                例子
                    对一个集合中的多个字符串进行某种规则的过滤,返回过滤后的结果
                    public static List<String> testString(List<String> list, Predicate<String> pre){
                            //定义一个List集合,存储满足条件的字符串
                            List<String> strs = new ArrayList<>();
                            //遍历原list集合,拿到每一个字符串进行判定
                            for(String s :list){
                                //满足条件字符串放入strs集合
                                if(pre.test(s)){
                                    strs.add(s);
                                }
                            }
                            return strs;
                        }

方法引用
    :: (看得懂,能修改)
    简化lambda表达式的
    是lambda表达式的另外一种变现形式
    前提
        当lambda体的实现是通过调用另外一个方法实现的,可以通过方法引用直接引用这个方法,用来简化完整的lambda表达式的结构
    语法
        对象::实例方法
        类名::静态方法
        类名::实例方法
    要求
        1.lambda的参数列表与返回值要求能够一一对应lambda体中所引用方法的参数列表与返回值
        2.lambda的返回值要求与所引用方法的返回值保持对应一致
            lambda的参数列表如果只有一个参数 :
                作为调用所引用的成员方法的对象存在
            lambda的参数列表如果存在多个参数
                第一个参数作为调用所引用的成员方法的对象存在,lambda的第二个参数开始,一一对应匹配所引用方法的参数列表
    构造器引用
        数据类型::new

Stream
    定义
        数据的渠道,用来操作由数据源(数组,集合)所产生的元素序列.
    与IO区别
        IO
            传输数据
        Stream流
            操作数据,计算数据
        数组|集合
            存储数据
    特点
        1.Stream流本身不会存储数据
                2.Stream不会修改数据源|源对象,每次回返回持有结果的新的流Stream
                3.延迟执行|惰性加载 : 当获取终止行为时候,才会执行一系列的中间操作
                4.流都是一次性的流,不能重复使用多次,一旦使用过就已经被破坏
    步骤
        1.创建Stream
            1)Collection->stream
                        2)Arrays->stream(数组)
                        3)Stream.of(值列表)
        2.一系列流式的中间操作(都会返回一个持有结果的新的流)
            1.过滤 Stream filter(Predicate<? super T> predicate);
                    2.去重 distinct()
                比较equals与hashCode()
            3.截取 limit(long) 从第一个开始截取几个
                    4.跳过 skip(long) 跳过前n个
                    5.排序 sorted() --> 内部比较器
                sorted(Comparator) ->外部比较器
            6.映射 map(Function fun)
                stream操作的每一个数据都所用于参数函数,映射成一个新的结果,最后返回一个持有所有映射后的新的结果的流
                3.终止行为
            1.遍历  foreach(Consumer)
                    2.查找与匹配
                // allMatch-检查是否匹配所有元素
                            // anyMatch-检查是否至少匹配一个元素
                            // noneMatch-检查是否没有匹配所有元素
                            // findFirst-返回第一个元素
                            // findAny-返回当前流中的任意元素
                            // count-返回流中元素的总个数
                            // max-返回流中最大值
                            // min-返回流中最小值
            3.规约 reduce
                map->reduce
                            加工->计算结果
            4.收集
                collect()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值