• JDK8--03:lambda表达式语法


    对于lambda表达式的基础语法,一个是要了解lambda表达式的基础语法,另外一个是需要了解函数式接口

    一、lambda表达式基础语法描述

      java8中引入了新的操作符  ->  ,可以称为lambda操作符或者箭头操作符,操作符将lambda表达式拆分为两部分。

      左侧:参数列表

      右侧:表达式要执行的代码,即lambda体

      lambda的格式总体有以下几种:

      第一种:无参数,无返回值

      第二种:有参数,无返回值

        变体1:可以省略入参的类型

        变体2:有一个参数,可以省略参数的小括号

      第三种:有参数,有返回值

        变体:lambda体中只有一条执行语句,可以省略lambda体中的return和大括号

    二、lambda表达式样例

      1、表达式一,无参数,无返回值

    /**
         * lambda表达式一
         */
        public void test1(){
            //jdk1.7之前
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    System.out.print("hello runnable");
                }
            };
            runnable.run();
    
            System.out.println("=============================");
    
            //使用lambda表达式
            Runnable runnable1 = () -> System.out.println("hello lambda");
            runnable1.run();
        }

      2、表达式二:有参数,无返回值

    public void test2(){
            Comparator<Integer> comparator = (Integer x, Integer y) -> Integer.compare(x,y);
        }

        变体1:可以省略入参的类型(这是因为jvm编译器在编译时可以根据上下文进行类型推断,从而推断出入参的类型;另外此处要省略全不省略,不能有的参数省略,有的参数不省略)

    public void test3(){
            Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
        }

        变体2:有一个参数,可以省略参数的小括号

        public void test4(){
            Consumer<String> consumer = x -> System.out.println(x);
            consumer.accept("hello");
        }

      第三种:有参数,有返回值

        public void test5(){
            Comparator<Integer> comparator = (Integer x, Integer y) -> {
                log.info("hello test5");
                return Integer.compare(x,y);
            };
        }

        变体:lambda体中只有一条执行语句,可以省略lambda体中的return和大括号(其实这个已经展示过,在第二种的变体1种)

    public void test3(){
            Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
        }

    总结:

      左右遇一括号省

      左侧推断类型省

    三、函数式接口

      lambda表达式需要函数式接口的支持,函数式接口即一个接口中只有一个实现方法。可以使用注解@FunctionalInterface进行检验

    四、函数式接口样例(java8提供了四大核心函数式接口,后续会说明)

      新建一个函数式接口

    package com.example.jdk8demo.lambda;
    
    @FunctionalInterface
    public interface MyInterface {
        Integer getInteger(Integer i);
    }

      新增函数式接口调用方法

        public Integer getInteger(Integer i, MyInterface mi){
            return mi.getInteger(i);
        }

      最后就是使用lambda表达式具体的实现逻辑

        public void test6(){
            //获取10的平方
            log.info("============" + getInteger(10,(x) -> x*x));
        }
  • 相关阅读:
    Oracle通过最小分区增加分区的SQL
    Oracle获取时间段内的各月底日期
    GET_MAPPING_DQL based on columns
    Oracle 分析问题sql的历史执行情况
    Oracle v$sql,v$sqlarea,v$sqltext区别
    Oracle修改表及分区表的表空间
    Oracle tablespace size sql
    ORACLE alter table storage
    Emmet的HTML语法(快速生成代码)
    Js中replace替换所有.
  • 原文地址:https://www.cnblogs.com/liconglong/p/12452913.html
Copyright © 2020-2023  润新知