对于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(,(x) -> x*x));
}

JDK8--03:lambda表达式语法的更多相关文章

  1. Java8初体验(一)lambda表达式语法

    感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解 ...

  2. Java8 lambda表达式语法 1

    本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化.本文是该系列的第一篇, ...

  3. Java8初体验(1):lambda表达式语法

    原文出处: 一冰_天锦 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化 ...

  4. Lambda 表达式语法

    本主题介绍 lambda 表达式的语法. 它演示提供 lambda 表达式的结构元素的示例,这些元素与示例. Lambda 表达式语法 下面用于定义显示语法,ISO C++11 从标准,lambda ...

  5. JDK8 的 Lambda 表达式原理

    JDK8 使用一行 Lambda 表达式可以代替先前用匿名类五六行代码所做的事情,那么它是怎么实现的呢?从所周知,匿名类会在编译的时候生成与宿主类带上 $1, $2 的类文件,如写在 TestLamb ...

  6. Lambda表达式语法

    基础语法:‘->’Lambda操作符* 左侧:Lambda表达式的参数列表 对应接口中方法中的参数列表中的参数(比如nice1中MyPredict这个接口中的方法)* 右侧:Lambda表达式中 ...

  7. java8【一、lambda表达式语法】

    特点 lambda表达式允许将函数作为方法的参数 lambda表达式更加简洁 特征 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值. 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需 ...

  8. Lambda表达式语法进一步巩固

    上一次已经初步使用到了Lambda表达式了,这次再次对它的语法进行一下巩固,因为它实在是太重要的,所以多花时间彻底理解它是非常有必要的. 在"Java8 in Action"一书中 ...

  9. JDK8新特性03 Lambda表达式03_Java8 内置的四大核心函数式接口

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.functio ...

随机推荐

  1. 前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)

    开门见山,本文分享前后端分离,容器化前端项目时动态插入后端API基地址,这是一个很赞的实践,解决了前端项目容器化过程中受制后端调用的尴尬. 尴尬从何而来 常见的web前后端分离:前后端分开部署,前端项 ...

  2. golang内置类型和内置函数

    golang内置类型和内置函数是不需要引入包直接可用的 golang内置类型: 数值类型 string int,unint float32,float64 bool array 有长度的 comple ...

  3. 折腾自己的js闭包(二)

    前面我大致探讨了js里的闭包的相关概念,那么,到底在什么时候用它最好呢?存在即真理,只不过以前没发现它而已,先来看看下面的这几个用途吧 一.我首先想到的就是从函数外面访问它的内部变量,从而达到自己的一 ...

  4. 集合遍历元素的3种方法:for、foreach、迭代器iterator

    1.for循环方式(Set集合不能使用,因为Set是无序的没有索引) for (int i = 0; i < list.size(); i++) { Object o = list.get(i) ...

  5. BFART算法

    参考:https://zhuanlan.zhihu.com/p/31498036 https://www.jianshu.com/p/83bb10ad1d32

  6. HashMap源码解析(java1.8.0)

    1.1 背景知识 1.1.1 红黑树 二叉查找树可能因为多次插入新节点导致失去平衡,使得查找效率低,查找的复杂度甚至可能会出现线性的,为了解决因为新节点的插入而导致查找树不平衡,此时就出现了红黑树. ...

  7. 国外程序员整理的Java资源大全(全部是干货)

    原文 译者 唐尤华 翻译自 github akullpp 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Ma ...

  8. jQuery - Ajax ajax方法详解

    $.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Strin ...

  9. 深入理解PHP原理之Opcodes

    Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL. 举个例子,比如你写下了如下的PHP代码: <?php echo "Hello Wo ...

  10. Activiti6 学习日志(一):整合 SpringBoot2.1.3

    本章节记录整合过程和部分问题,目前整合并不完美后续会继续更新... 文档链接: 5.2.1 activiti用户手册 activiti用户手册 activiti6 API 技术栈: springboo ...