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(,(x) -> x*x));
}
JDK8--03:lambda表达式语法的更多相关文章
- Java8初体验(一)lambda表达式语法
感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解 ...
- Java8 lambda表达式语法 1
本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化.本文是该系列的第一篇, ...
- Java8初体验(1):lambda表达式语法
原文出处: 一冰_天锦 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化 ...
- Lambda 表达式语法
本主题介绍 lambda 表达式的语法. 它演示提供 lambda 表达式的结构元素的示例,这些元素与示例. Lambda 表达式语法 下面用于定义显示语法,ISO C++11 从标准,lambda ...
- JDK8 的 Lambda 表达式原理
JDK8 使用一行 Lambda 表达式可以代替先前用匿名类五六行代码所做的事情,那么它是怎么实现的呢?从所周知,匿名类会在编译的时候生成与宿主类带上 $1, $2 的类文件,如写在 TestLamb ...
- Lambda表达式语法
基础语法:‘->’Lambda操作符* 左侧:Lambda表达式的参数列表 对应接口中方法中的参数列表中的参数(比如nice1中MyPredict这个接口中的方法)* 右侧:Lambda表达式中 ...
- java8【一、lambda表达式语法】
特点 lambda表达式允许将函数作为方法的参数 lambda表达式更加简洁 特征 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值. 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需 ...
- Lambda表达式语法进一步巩固
上一次已经初步使用到了Lambda表达式了,这次再次对它的语法进行一下巩固,因为它实在是太重要的,所以多花时间彻底理解它是非常有必要的. 在"Java8 in Action"一书中 ...
- JDK8新特性03 Lambda表达式03_Java8 内置的四大核心函数式接口
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.functio ...
随机推荐
- 附021.Traefik-ingress部署及使用
一 Helm部署 1.1 获取资源 [root@master01 ~]# mkdir ingress [root@master01 ~]# cd ingress/ [root@master01 ing ...
- Rocket - debug - TLDebugModuleInner - Drive Custom Access
https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw 简单介绍TLDebugModuleInner中的针对Custom的访问. 1. customNode ...
- Rocket - diplomacy - LazyModule
https://mp.weixin.qq.com/s/FBU8fE4u9-UK6mRGQOlvbQ 介绍LazyModule的实现. 1. children LazyModu ...
- JSON.parse() 的实现
目录 1. JSON.parse() 2. 前置知识 2.1 JSON格式中的数据类型 2.2 转义字符的处理 2.2 判断对象是否相等 2.3 寻找匹配的字符串 2.4 基础的递归思想 3. 实现流 ...
- Spring ( 二 ) IOC 依赖注入
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.什么是IOC IOC 全称指的是 Inverse Of Control 控制反转. 原来我们使用Sp ...
- Java实现蓝桥杯模拟带九9的数的个数
问题描述 在1至2019中,有多少个数的数位中包含数字9? 注意,有的数中的数位中包含多个9,这个数只算一次.例如,1999这个数包含数字9,在计算只是算一个数. 答案提交 这是一道结果填空的题,你只 ...
- Java实现 LeetCode 109 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...
- Java实现 蓝桥杯 历届真题 数字拆分
正整数可以表示为若干正整数的累加和. 如,对于正整数n=6,可以分划为: 5+1 4+2 4+1+1 3+3 3+2+1 3+1+1+1 2+2+2 2+2+1+1 2+1+1+1+1 1+1+1+1 ...
- 第四届蓝桥杯C++B组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜灯谜 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的 ...
- java实现角谷步数
你听说过角谷猜想吗? 任意的正整数,比如 5, 我们从它开始,如下规则计算: 如果是偶数,则除以2,如果是奇数,则乘以3再加1. 如此循环,最终必会得到"1" ! 比如 5 的处理 ...