Java8新特性

Posted tongstudy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8新特性相关的知识,希望对你有一定的参考价值。

Java 8新特性

lambda表达式

函数式编程思想:强调做什么,而不是怎么做. 只要能获取结果,谁去做怎么做不重要,重要的是结果,而不是过程.

面向对象:做一件事就去找能做这个事的对象,调用对象的方法去完成事情

==原本冗余的代码可以更加清楚,减少代码量==

Runnable接口实现多线程, 匿名内部类----


Lambda表达式的标准格式

他省去了面向对象的条条框框,右三部分组成

  • 一些参数
  • 一个箭头
  • 一段代码

(参数类型 参数名称)->{代码语句}

省略规则:
  1. 小括号内的参数类型可以省略
  2. 如果小括号里有且仅有一个参数,那么小括号也可省略
  3. 如果大括号有且仅有一个语句,无论是否有返回值,都可以省略大括号,return关键字及语句分好
使用前提:
  1. 使用lambda必须具有接口,且要求接口中只有一个方法
  2. 使用lambda必须具有上下文推断

函数式接口:

概念: 有且只有一个抽象方法的接口

语法糖! 指使用更加方便,但是原理不变的代码语法,例如for each 其实底层原理就是迭代器,,应用方面Java中的lambda就是匿名内部类的语法糖!

@FunctionalInterface注解

表示,只要用这个注解,编译器就会强制的检查接口是否确实只有一个方法,否则就会报错.

lambda的延迟执行

public class TestDelayedExecute {
    //性能浪费的日志案例
    private static void log(int level ,String msg){
        if (level==1){
            System.out.println(msg);
        }
    }

    //利用lambda表达式延迟执行
    private static void log2(int level,MessageBuilder printMsg){
        if (level ==1){
            System.out.println(printMsg.printMsg());
        }
    }

    //测试
    public static void main(String[] args) {
        String msgA = "I ";
        String msgB = "Love ";
        String msgc = "Java";
        log(1,msgA+msgB+msgc);

        log2(2,()->{
            System.out.println("我是执行了的Lambda");
            return msgA+msgB+msgc;
        });
    }
}

@FunctionalInterface
interface MessageBuilder{
    String printMsg();
}

lambda作为参数和返回值

常用的函数式接口

被提供主要在java . util. function包中

supplier接口 只有一个无参的方法 表示生产一个数据

技术图片

Consumer接口 与supplier相反 ,为消费一个数据

技术图片

Predicate接口

技术图片

Function接口

技术图片

Stream流及方法引用

stream流不同于IO流是一个完全不一样的概念

流式思想 : 类似于工厂车间的"生产流水线"

stream流的获取:

collection集合都可以通过stream流来获取

  1. 根据collection来获取
  2. 根据map来获取
  3. 根据数组来获取

stream流的方法

延迟方法:返回值类型仍然是 Stream 接口自身类型的方法,因此支持链式调用。(除了终结方法外,其余方 法均为延迟方法。)

终结方法:返回值类型不再是 Stream 接口自身类型的方法,因此不再支持类似 StringBuilder 那样的链式调 用。本小节中,终结方法包括 count 和 forEach 方法。 **

forEach:逐一处理

技术图片

filter:过滤

count: 统计个数

limit:取用前几个

skip 跳过前几个

contact: 组合

方法的引用

冗余的lambda场景

双冒号::为引用运算符,而在表达式中被称为 方法引用

技术图片

以上是关于Java8新特性的主要内容,如果未能解决你的问题,请参考以下文章

2020了你还不会Java8新特性?Java 8新特性介绍

java8新特性——Lambda表达式

Java8新特性

java8新特性总结

Java8新特性

Java8新特性-官方库新特性