对于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. Spring AMQP:RabbitTemplate SimpleMessageListenerContainer

    一.RabbitTemplate介绍 RabbitTemplate:消息模板,在与Spring AMQP整合时,进行发送消息的关键类. 包括了可靠性投递消息方法.回调监听消息接口ConfirmCall ...

  2. Redis 入门到分布式 (六)常见的持久化开发运维问题

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.常见问题目录 fork操作 进程外开销 AOF追加阻塞 单机多实例部署 二. fork 1.Fork ...

  3. JavaScript (四) js的基本语法 - - 函数练习、arguments、函数定义、作用域、预解析

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.函数练习 1.求最值 // - 求2个数中的最大值 function getMax(num1, nu ...

  4. Java实现 LeetCode 398 随机数索引

    398. 随机数索引 给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引. 您可以假设给定的数字一定存在于数组中. 注意: 数组大小可能非常大. 使用太多额外空间的解决方案将不会通过测试 ...

  5. Java实现 LeetCode 345 反转字符串中的元音字母

    345. 反转字符串中的元音字母 编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 ...

  6. Java实现 LeetCode 24 两两交换链表中的节点

    24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...

  7. Java中多态举例说明

    这里我也就大概说一下他们的关系, 接口就是动物,然而每一个类就是一种动物 给猫有两个功能:叫和睡觉 狗:叫 在f方法里面可以把猫的功能实现 但不能实现狗的功能 在主方法里面有一个猫有一个狗 分别调用 ...

  8. Java实现Labeling Balls(拓扑排序的应用)

    1 问题描述 给出一些球,从1N编号,他们的重量都不相同,也用1N标记加以区分(这里真心恶毒啊,估计很多WA都是因为这里),然后给出一些约束条件,< a , b >要求编号为 a 的球必须 ...

  9. ReentrantReadWriteLock源码分析及理解

    本文结构 读写锁简介:介绍读写锁.读写锁的特性以及类定义信息 公平策略及Sync同步器:介绍读写锁提供的公平策略以及同步器源码分析 读锁:介绍读锁的一些常用操作和读锁的加锁.解锁的源码分析 写锁:介绍 ...

  10. ES 复合查询

    ES在查询过程中比较多遇到符合查询,既需要多个字段过滤也需要特殊情况处理,本文简单介绍几种查询组合方便快捷查询ES. bool布尔查询有一个或者多个布尔子句组成     filter 只过滤符合条件的 ...