栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一、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 map = new HashMap<>();
        map.put("张三",14);
        map.put("张1",15);
        map.put("张2",17);
        map.put("张3",13);

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

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

        Set> set1 = map.entrySet();
        set1.stream().forEach(s-> System.out.println(s));

        for (Map.Entry 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);

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439296.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号