JDK 1.8 新特性(个人总结,因为面试问到被拷打)

本文深入介绍了Java 8的三大核心特性:Lambda表达式,包括其语法、应用场景;新增的四个函数式接口,如Supplier、Consumer、Function和Predicate及其方法;以及接口的default和static方法,解释了它们的作用和使用方式。此外,文章详细探讨了集合的Stream流式操作,列举了多种遍历方式,并重点讲解了distinct、match、find、sort、reduce、mapToInt等方法的使用,以及如何通过map和reduce组合进行数据处理。最后,提到了如何将流式操作的结果收集为集合或数组。

一、lambda表达式

       格式:()-> { 方法体 }

        方法的参数或局部变量类型是函数式接口(有且仅有一个抽象方法),

        @FunctionalInterface 函数式接口检验

        

1、Collections.sort(List list,Comparato c),根据上面的规则

        

2、用匿名内部类Runnable接口作为参数开启一个线程,可以精简

        

3、小结,黑马JDK8新特性的b站视频

    

二、新增四个函数式接口,一开始觉得没啥用,后来想应该是解耦合以及实现代码复用

  1. Supplier:生产者,有一个get方法
  2. Consumer:消费者,有accept方法和andThen()
  3. Function:apply方法,传一个类型的值,返回另一个类型的值,也有andThen,compose 方法(应该是执行先后的问题,源码里一个before,一个after),还有identity方 法(返回本身??)
  4. Predicate:test方法,做判断用,返回boolean类型  

三、接口新增default方法 static 方法

  1. A、因为一个接口有很多实现类,比如Map,要是新增一个方法,所有实现类都会 报错,都需要重写这个方法,所以新增默认方法,方便方法的扩展。

        B、方式一:实现类可以直接调用

              方式二:实现类可以重写   

  1. static方法不能用实现类的实例调用,直接 接口名.method()调用,也可以给接口 其他方法使用
  2. 静态方法和默认方法的区别 + 小结

         

四、集合的Stream流式操作

        1、回顾 map 的四种遍历方式

public void test(){
        Map<String,Integer> map = new HashMap<>();
        map.put("张三",14);
        map.put("张1",15);
        map.put("张2",17);
        map.put("张3",13);

        Set<String> set = map.keySet();
        set.stream().forEach(s-> System.out.println(s));

        Collection<Integer> collection = map.values();
        collection.stream().forEach(s-> System.out.println(s));
       

        Set<Map.Entry<String, Integer>> set1 = map.entrySet();
        set1.stream().forEach(s-> System.out.println(s));

        for (Map.Entry<String,Integer> me : map.entrySet()){
            System.out.println(me.getKey()+"  "+me.getValue());
        }
    }

        2、 a、获取流的方式一:集合对象 . stream();map 的话按上面获取集合形式

               b、获取流的方式二:基本数据类型和引用数据类型数组有区别

                可以看到,基本数据类型数组是作为一个元素进行操作

                

         3、小结,常用方法和注意事项

                

                方法补充:

                        a、distinct方法可以直接去重,面试当时问到还不会

                        b、match(allMatch anyMatch nonematch , 全满足,任一满足,全部满足)返回  boolea类型

                        c、find(findFirst findAny)一样的查找第一个

                        d、sort 空参:默认排序,可以里面加 new Comparator接口自定义排序

                        e、max 和 min 方法:查找最大值 \ 最小值,需要加Comparator自定义排序,查找  出来是Optional类型的值,直接输出 String.format("Optional[%s]", value),不想  要可以用max.get()

                        f、reduce:传两个参数,返回一个值,能获取上一次的结果并进行操作

                        g、map 和 reduce 组合使用,可以将一个类型的转换类型并操作,比如对象转为    对象的属性然后对属性进行操作

                              examp:比如统计一串字符中某个字符出现的次数,可以用filter过滤然后          count;或者用map将等于的变为1,不等的变为0,然后reduce相加

                        h、mapToInt,因为泛型里都是Integer包装类,操作会涉及装箱和拆箱,转为int      类型的话,会节省内存,用mapToInt(Integer::intValue),类名::方法名

                        i、静态 Stream.concat 合并两个流,注意,合并后原先的流不能进行操作,不同 同类型的也可以

        4、将结果收集成集合或者数组

                a、集合:stream.collect(Collectors.toCollection(ArrayList(或别的)::new))如果是set、map类型,会自动去重,否则是List或Set(Collectors.toList(Set))

                b、数组:stream.toArray(String[](或别的类型,否则是Object[])::new);

后面还有好多,以后感兴趣再看...............................

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值