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:楼主比较菜鸟,理解的还是不够深,下次再理解了一些原理性的再往里面加!

  • 相关阅读:
    思考未来--马云说:30年后的世界不属于互联网公司
    公司管理系列--Facebook是如何营造企业文化的[转]
    公司管理系列--摒弃“学生思维”,教你如何科学地步入互联网职场?[转]
    问题集录--如何本地调试微信接口(未测试)
    公司管理系列--80% of Your Culture is Your Founder(FaceBook)
    常用工具说明--Mockplus,简洁的原形图设计工具
    你应该知道的计算机网络知识
    【转】TCP那些事(上,下)
    【转】由浅入深探究mysql索引结构原理、性能分析与优化
    【转】程序员技术练级攻略
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551183.html
Copyright © 2011-2022 走看看