zoukankan      html  css  js  c++  java
  • 关于java8新特性的一些总结

    以前找工作时,看了java8新特性,不能深入理解,感觉只是看了个皮毛,今天再看了一遍,多了些新的理解:
    1.Lambda表达式
    优化的问题:
    主要在减少代码编写方面进行了优化,主要减少了什么代码的编写,看例说明?
    java7与java8的对比

    package test;
    @FunctionalInterface
    public interface MyWorld {
         void doSometing(String s);
    }

    在java7中满足面向接口编程需要,写一个实现该接口的类,再new

    package test;
    public class MyTruelyWorld {
         public static void main(String[] args) {
            new MynewWorld().doSometing("学习lambda");
        }
    }
    class MynewWorld implements MyWorld {
        @Override
        public void doSometing(String s) {
            System.out.println(s);
        }
    }
    

    而对于Lambda可以简化成:

    package test;
    public class MyTruelyWorld2 {
        public static void main(String[] args) {
            MyWorld myWorld=(s)-> {System.out.println(s);};
            myWorld.doSometing("学习Lambda");
        }
    }

    注意对比看:
    1.将一段代码直接赋值给了变量myWorld
    2.这段代码的作用是实现MyWorld接口,并new出来。
    当然,在java8中提供了Consumer,Predicate等接口(接口具体说明见下篇文章),上面的代码就可以不用编写MyWorld接口,直接简化成:

    package test;
    import java.util.function.Consumer;
    public class MyTruelyWorld2 {
        public static void main(String[] args) {
            Consumer myWorld=(s)-> {System.out.println(s);};
            myWorld.accept("学习Lambda");
        }
    }

    是不是少了很多代码啊~
    2.@FunctionalInterface注解
    作用:这个注释比较简单加在接口上就表示该接口只能定义一个抽象方法,避免使用Lambda时自定义接口出现多个实现方法的问题。
    3.stream
    优化的问题:
    stream主要在java集合类方面进行了优化,类似Iterator,但优于Iterator,Iterator在获取集合中的最大元素,最小元素,集合中的某个值的位置等聚合操作时需要for循环挨个遍历,而stream不需要。
    stream的使用:
    有很多已经实现了的方法,这里列举一二:

    package test;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    public class MyTruelyWorld2 {
        public static void main(String[] args) {
            //过滤出值为偶数的元素并输出
            List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
            Stream<Integer> stream = list.stream();
            stream.filter((x) -> x % 2 == 0).forEach((x)->System.out.println(x));
            //过滤出值为偶数的元素并转换为list<Integer>
            List<Integer> list2 = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
            Stream<Integer> stream2 = list.stream();
            List <Integer> finalList1=stream2.filter((x) -> x % 2 == 0).collect(Collectors.toList());
    
        }
    }
    
    

    4.Optional 及联想到Guava中的optional
    优化的问题:
    使用方法:

    ps:楼主比较菜鸟,理解的还是不够深,下次再理解了一些原理性的再往里面加!

  • 相关阅读:
    C#线程池
    C#.Net前台线程与后台线程的区别
    ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler)(转)
    ASP.NET Core 2.1 : 十四.静态文件与访问授权、防盗链(转)
    ASP.NET Core 2.1 : 十三.httpClient.GetAsync 报SSL错误的问题(转)
    ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件(转)
    ASP.NET Core 2.1 : 十一. 如何在后台运行一个任务(转)
    ASP.NET Core 2.1 : 十.升级现有Core2.0 项目到2.1(转)
    ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署(转)
    ASP.NET Core 2.0 : 八.图说管道,唐僧扫塔的故事(转)
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551183.html
Copyright © 2011-2022 走看看