对于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. Physic Design:Floorplan算法概览

    仅用于学习交流,转载请联系本人. 1 floorplan是什么 floorplan常被翻译成布图规划,是指在芯片级别上对模块进行布局,也就是哪个单元放在什么地方,但是单元内部的具体布局并不关心.该步骤 ...

  2. Java实现 LeetCode 面试题13. 机器人的运动范围(DFS)

    面试题13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不能移动 ...

  3. (Java实现) 过河卒

    过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为&q ...

  4. Java实现 蓝桥杯VIP 算法提高 聪明的美食家

    算法提高 聪明的美食家 时间限制:1.0s 内存限制:256.0MB 问题描述 如果有人认为吃东西只需要嘴巴,那就错了. 都知道舌头有这么一个特性,"由简入奢易,由奢如简难"(据好 ...

  5. Java实现 LeetCode 99 恢复二叉搜索树

    99. 恢复二叉搜索树 二叉搜索树中的两个节点被错误地交换. 请在不改变其结构的情况下,恢复这棵树. 示例 1: 输入: [1,3,null,null,2] 1 / 3 \ 2 输出: [3,1,nu ...

  6. Java实现 LeetCode 46 全排列

    46. 全排列 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2] ...

  7. PAT 反转链表

    给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输出应该 ...

  8. Android9.0配置charles的https抓包

    问题: 按照charles的正常流程去安装证书后,然后使用手机(一加5T,安卓9.0)访问https站点发现有些CONNECT请求无法查看,但是其它类型都支持https 解决方案: 前提条件:手机已经 ...

  9. Flask 的 session

    Flask 的 session @app.route("/", ) def index(): # 如何设置sessoion # 1 导入session # 2 给sessoion设 ...

  10. UI 小白设计常用的Website

    网址 设计师导航网址(其实这个用好了,enough) 设计导航1 设计导航2 icon 阿里巴巴Iconfont flaticons icomoon Noun Project 图片(有时候就是灵魂) ...