JDK8的新特性

简介: JDK8的新特性这两天开始看jdk8的新特性,先看了Lembda表达式和Stream,就一个感觉,优雅。赶紧将这两天的成果总结一下一、Lembda表达式Lembda表达式格式lembda表达式是一个简洁、可传递的匿名函数,实现了把代码块赋值给一个变量的功能格式就是 (parameters...

JDK8的新特性

这两天开始看jdk8的新特性,先看了Lembda表达式和Stream,就一个感觉,优雅。
赶紧将这两天的成果总结一下

一、Lembda表达式

Lembda表达式格式

lembda表达式是一个简洁、可传递的匿名函数,实现了把代码块赋值给一个变量的功能

格式就是 (parameters) -> expression ,需要注意的是:

  1. 参数可以为空 ()->xxx
  2. 参数为一个值得时候,可以省略参数的括号 x->xxx
  3. 表达式只有一行的时候不需要;,有多行的时候需要加上;
  4. 表达式可以是一个数字(直接返回这个数字),一个算式;可以是普通的一个语句(无返回,相当于void)
  5. 参数的名不能和局部变量相同
  6. 表达式中直接调用的变量(不是传入的),必须是显示声明为final或事实上的final类型

函数式接口

lambda表达式的使用需要借助于函数式接口
含有且仅含有一个抽象方法的接口被称为函数式接口
需要注意的是,default关键字可以在接口中定义实现,如果一个接口含有多个实现但是只有一个抽象方法,那么它也属于函数式接口

自定义函数式接口

一般用@FunctionInterface对函数式接口来进行语义化标注

步骤:

  1. 定义一个函数式接口
    @FunctionalInterface
    public interface Append {
        int append(int a,int b);
    }
    public static void main(String[] args) {
        //对这个接口的抽象方法进行实现,并用该接口进行接收
        Append append = ((a, b) -> a + b);
        //调用这个方法
        int result = append.append(1, 2);
        System.out.println("result = "+result);
    }
  1. 对这个接口的抽象方法进行实现,并用该接口进行接收,
  2. 调用这个方法

结果: result = 3

JDK自带的函数式接口

  1. Predicate
    进行判断
    boolean test(T t);
    利用我们在外部设定的条件对于传入的参数进行校验并返回验证通过与否
  2. Consumer
    消费者 void accept(T t);
    接收参数并依据传递的行为应用传递的参数值
  3. Function
    R apoly(T t);
    执行转换操作,输入类型 T 的数据,返回 R 类型的结果

这三个是最重要的接口,其他的接口都是从这三个接口演化而来,下面我强行使用这三个接口

    /*Predicate<T> 判断*/
    Predicate<String> stringPredicate = str -> StringUtils.isBlank(str) || "error".equalsIgnoreCase(str);
    
    /*Consumer<T>*/
    Consumer<String> stringConsumer = str -> {
        if (StringUtils.isBlank(str) || "error".equalsIgnoreCase(str)) {
            System.out.println("Consumer失败");
        }
    };
    /*Function<T,R>*/
    Function<String, String> stringStringFunction = str -> {
        if (StringUtils.isBlank(str) || "error".equalsIgnoreCase(str)) {
            return "Function失败";
        } else {
            return "Function成功";
        }
    };
    String in = "error";
    if (stringPredicate.test(in)) {
        System.out.println("Predicate失败");
    }
    stringConsumer.accept(in);
    System.out.println(stringStringFunction.apply(in));

方法引用

在表达式中,可以使用::更方便的调用方法,它会自动将参数传入,并且将返回值返回
比如
System.out.println(传入参数)可以转换为System.out::println
表达式只需要调用一个方法就可以完成功能的时候,可以用这种方法来进一步简化代码;

目录
相关文章
|
4天前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
12 3
|
8天前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
2月前
|
Java API
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
|
2月前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
|
2月前
|
Oracle Java 关系型数据库
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
|
2月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
2月前
|
Java 编译器 API
JDK版本特性问题之在 JDK 17 中,想声明一个密封类,如何解决
JDK版本特性问题之在 JDK 17 中,想声明一个密封类,如何解决
|
2月前
|
Java API 开发者
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
|
1月前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
8 0
|
2月前
|
算法 Java iOS开发
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化