通过这些示例快速学习Java lambda语法
对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏。但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然。
Java中lambda表达式的目标是实现单个方法。所有Java方法都有一个参数列表和一个正文,因此毫不奇怪这两个元素是Java lambda语法的重要组成部分。此外,Java lambda语法用箭头分隔这两个元素。因此,要学习Java lambda语法,您需要熟悉它的三个组成部分:
- 参数列表
- 箭头
- 方法体
要应用这些概念,我们首先需要一个功能接口。功能接口是仅定义必须实现的单个方法的接口。以下是我们将用于此示例的功能接口:
interface SingleArgument {
public void foo(String s);
}
此接口的方法需要传入String参数,lambda为SingleArgument接口提供了一个实现,以及对接口的foo方法的几次调用:
SingleArgument sa1 = n -> System.out.print(n);
sa1.foo("Let us all");
sa1.foo(" learn lambda syntax");
以下是实现此逻辑的完整类:
public class LearnJavaLambdaSyntax {
public static void main(String args[]) {
SingleArgument sa1 = n -> System.out.print(n);
sa1.foo("Let us all");
sa1.foo(" learn lambda syntax");
}
}
interface SingleArgument {
public void foo(String s);
}

简明扼要的Java lambda语法
上面演示的实现是高度缩写的。这有时会让新手学习Java lambda语法有点困难。有时候,为代码添加更多的仪式是有帮助的。可以使学习Java lambda语法更容易的一个增强是在方法签名周围放置圆括号并在左侧包含类型声明:
SingleArgument sa2 = (String n) - > System.out.print(n) ;
此外,您可以在右侧的内容周围放置花括号,并使用分号结束每个语句
SingleArgument sa3 = (String n) - > {System.out.print(n); } ;
多行lambda表达式语法
实际上,如果您的方法实现具有多个语句,则需要使用分号和大括号。例如,如果我们想要使用正则表达式,在打印出一段给定的文本之前去除所有空格,我们的Java lambda语法将如下所示:
(String n) -> {
n = n.replaceAll("\\s","");
System.out.print(n);
}
多参数lambda函数
在此示例中,函数接口中的方法只有一个参数,但多个参数完全有效,只要lambda表达式中的参数数量与功能接口的方法中的数字匹配即可。由于Java是强类型语言,因此对象类型也必须是多态匹配。
以下面的功能接口为例:
interface MultipleArguments {
public void bar(String s,int i);
}
用于实现此功能接口的高度礼仪式Java lambda语法如下:
MultipleArguments ma1 = (String p, int x) -> {
System.out.printf("%s wants %s slices of pie.\n", p, x);
};
如您所见,这个lambda表达式利用了多个参数,而不仅仅是一个。
我把这个例子描述为高度仪式,因为我们可以大大降低其冗长度。我们可以删除左边的类型声明,我们可以删除右边的花括号和冒号,因为方法实现中只有一条指令。Java lambda语法的更简洁用法如下:
( p, x ) -> System.out.printf ( "%s wants %s slices.\n", p, x )
正如您所看到的,Java lambda语法与传统JDK开发人员习惯的语法略有不同,但与此同时,当您将其分解时,很容易看出所有部分是如何组合在一起的。通过一些练习,开发人员很快就学会了喜欢Java lambda语法。
通过这些示例快速学习Java lambda语法的更多相关文章
- Java秘诀!零基础怎样快速学习Java?
对于零基础想学Java的朋友,其实一开始最应该做的就是定好学习目标和端正学习态度,切记不要三天打鱼两天晒网! 首先你是零基础,现在急需把Java学好,在保证学习质量的同时,用最短的时间学好Java应该 ...
- Java 8教程(知识内容详细,快速学习Java 8)
允许在接口中有默认方法实现 Lambda表达式 函数式接口 方法和构造函数引用 Lambda的范围 内置函数式接口 Predicates Functions Suppliers Consumers C ...
- Scala - 快速学习03 - 基础语法
1- 变量 变量 mutable variable 在程序运行过程中其值可能发生改变的量 关键词var定义变量,定义时直接进行求值 常量 immutable variable 在程序运行过程中其值不会 ...
- 学习java Markdown语法
Markdown学习 标题: #+标题名字+回车 二级标题 ##+标题名字+回车 三级四级一次类推,最多六级 字体 HELLO,World ! HELLO,World ! HELLO,World ! ...
- Java学习路线图(如何快速学Java)
不知不觉从初学Java到现在已经8年了,今天在这里给刚入门和入门不久的小伙伴们一些建议.可能总结的不是很详细,但给出了一个大概的学习路线.希望对大家有帮助哈~ 如何快速学Java 这里我以Java E ...
- 2018年如何快速学Java
前言 只有光头才能变强 提前预警:本文适合Java新手阅读(老手可在评论区给下建议),希望大家看完能有所收获. 一.为什么我要写下这篇文章 1.1直接缘由: 在今天(2018年11月4日)有个同学给我 ...
- 零基础的人怎么学习Java
编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...
- 第2天 第一个程序&IDEA安装&Java基础语法
第一个程序 Hello,World! 随便新建一个文件夹,存放代码 新建一个Java文件 文件后缀名为java Hello.java [注意点]系统可能没有显示后缀名,必须手动打开 编写代码 publ ...
- 守护石谈学习Java之路
这次在CSDN Blink发表了几篇关于Java编程学习的小作文,讲述了Java工程师的成长路线.Java学习的技能树和入门工作要关注的核心问题,我继续做一次文章的整合与延展,以文章的形式发表出来, ...
随机推荐
- 验证FluentValidation
FluentValidation https://www.xcode.me/code/fluentvalidation-dot-net-library 这里写得很详细了
- wpf根据X与Y轴获取内部值
效果图: 环境 Visual Studio ,.Net Framework 4.0 SDK 支持Windows XP,Windows Win7.. 实现方法: 创建ListBox设置ListBox.I ...
- MVC+Nhibernate+spring.net(三)
当前层次已经分好 分层架构 画的不是太好啊,后面我会上代码,大家先将就着看吧. 现在开始搭建spring 搭建spring首先引用类库文件: spring.AopSpring.Corespring.W ...
- JVM活学活用——GC算法 垃圾收集器
概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方 ...
- per学习笔记-zkclient,curator使用
开源客户端,原生api的不足 连接的创建是异步的,需要开发人员自行编码实现等待 连接没有自动的超时重连机制 Zk本身没提供序列化机制,需要开发人员自行指定,从而实现数据的序列化和反序列化 Watche ...
- 《react精髓》读书笔记
概述 前几天找react的技术书籍看,找到<react精粹>和<深入浅出React和Redux>.由于<react精粹>是外国人写的,再加上译者奇舞团我也比较喜欢, ...
- joi库 学习笔记
零.背景 node.js 应用中,req.query / req.body 传来的参数需要做 valication( 合法性验证 ) 一.安装 https://github.com/hapijs/jo ...
- Shell - 简明Shell入门13 - 用户输入(UserInput)
示例脚本及注释 1 - arguments #!/bin/bash if [ -n "$1" ];then # 验证参数是否传入 echo "The first para ...
- python学习笔记16-装饰器
装饰器(函数) 1.函数作用域 2.高阶函数 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. 3.闭包 闭包就是能够读取其他函数内部变量的函数. 在本质上,闭包 ...
- iOS-xcconfig环境变量那些事(配置环境的配置)
前言 在配置宏定义参数时,会发现一个问题,在需要临时修改或者测试一些数据时,修改宏,如果不修改,就多写一个,注释掉原来的,然后测试后,再换回来,当然了,如果一两个宏,可以这样,但是,如果每次改的比较多 ...