Java8新特性

主要就是新增了Lambda表达式和StreamAPI这两个东西

Lambda表达式的使用

1.举例:(o1,o2) -> Integer.compare(o1,o2);
2.格式:
-> : lambda操作符
->左边:lambda形参列表(其实就是接口中的抽象方法的形参列表)
->右边:lambda体(其实就是重写的抽象方法的方法体)
3.Lambda表达式的使用:

4.Lambda表达式的本质:作为函数式接口的实例

5.如果一个接口中,只声明了一个抽象方法,则此接口就成为函数式接口

6.所以以前用匿名实现类表示的现在都可以用Lambda表达式来写

举例:

        public void test1() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("没用Lambda");
            }
        };
        runnable.run();

        System.out.println("------------");

        Runnable runnable2 = () -> {
            System.out.println("用了Lambda");
        };
        runnable2.run();
    }

总结:

->左边:Lambda新茶列表的参数类型可以省略;如果Lambda形参列表只有一个那么()也可以省略
->右边:Lambda体应该用一对{}包裹;如果Lambda体只有一条执行语句,可以省略return或{}
当需要对一个函数式接口实例化的时候,可以使用Lambda表达式;
如果我们开发中需要定义一个函数式接口,首先看看在已有的jdk提供的函数式接口是否有能满足需求的函数式接口。如果有,则直接调用即可

相关面试题

说说Lamda表达式的优缺点
嗯...就我个人的理解的话,Lambda表达式的缺点还是挺多的,第一点就是不容易读懂,一起开发的时候没了解过Lambda的程序员需要花时间去学习,开发的时间成本就增加了;第二就是相对于匿名函数,Lambda调试起来困难一些,这个我感觉到还好;第三就是Lambda在串行处理的时候效率比for低,要在并行处理才能体现出Lambda的优势。
串行处理


并行处理

方法引用

1.使用情景:当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用

2.方法引用,本质上就是Lambda表达式,而Lambda表达式作为函数式接口的实例,所以
方法引用也是函数式接口的实例

3.使用格式: 类(或对象) :: 方法名

4.具体分为如下三种情况:
对象 :: 非静态方法
类 :: 静态方法
类 :: 非静态方法

5.方法引用使用的要求:接口中的抽象方法的形参列表和返回值类型与方法引用的方法的相同

举例:

public void test1(){
        Consumer<String> consumer = str -> System.out.println(str);
        consumer.accept("沈阳");

        PrintStream ps = System.out;
        Consumer<String> con2 = ps :: println;
        con2.accept("邵阳");
    }

Stream API

1.Stream关注的是对数据的运算,与cpu打交道
集合关注的是数据的存储,与内存打交道

2.
Stream不会自己存储元素
Stream不会改变源对象,相反,她们会返回一个持有结果的新的Stream
Stream操作时延迟执行的,这意味着她们会等到需要结果的时候才执行

3.Stream执行流程
1-Stream的实例化
2-一系列中间操作
3-终止操作

4.说明:
4.1一个中间操作链,对数据源的数据进行处理
4.2一旦执行终止操作,就执行中间操作链,并产生结果,之后不会再被使用

Stream创建的三种方式

//创建Stream方式一:通过集合
    @Test
    public void test1() {
        List<Employee> list = EmployeeData.getEmployees();
        //顺序流
        Stream<Employee> stream = list.stream();
        //并行流
        Stream<Employee> parallelStream = list.parallelStream();
    }

    //创建Stream方式二:通过数组
    @Test
    public void test2() {
        int[] arr = new int[]{1, 2, 3};

        IntStream stream = Arrays.stream(arr);
    }

    //创建Stream方式三:通过Stream的of()
    @Test
    public void test3() {
        Stream<Integer> stream = Stream.of(1, 2, 3);
    }

Stream的中间操作

1.筛选与切片
图片说明

2.映射
图片说明

3.排序
图片说明

Stream的终止操作

1.匹配与查找
图片说明
图片说明

2.归约

3.收集
图片说明
图片说明

全部评论

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务