对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏。但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然。

Java中lambda表达式的目标是实现单个方法。所有Java方法都有一个参数列表和一个正文,因此毫不奇怪这两个元素是Java lambda语法的重要组成部分。此外,Java lambda语法用箭头分隔这两个元素。因此,要学习Java lambda语法,您需要熟悉它的三个组成部分:

  1. 参数列表
  2. 箭头
  3. 方法体

要应用这些概念,我们首先需要一个功能接口。功能接口是仅定义必须实现的单个方法的接口。以下是我们将用于此示例的功能接口:

 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语法的更多相关文章

  1. Java秘诀!零基础怎样快速学习Java?

    对于零基础想学Java的朋友,其实一开始最应该做的就是定好学习目标和端正学习态度,切记不要三天打鱼两天晒网! 首先你是零基础,现在急需把Java学好,在保证学习质量的同时,用最短的时间学好Java应该 ...

  2. Java 8教程(知识内容详细,快速学习Java 8)

    允许在接口中有默认方法实现 Lambda表达式 函数式接口 方法和构造函数引用 Lambda的范围 内置函数式接口 Predicates Functions Suppliers Consumers C ...

  3. Scala - 快速学习03 - 基础语法

    1- 变量 变量 mutable variable 在程序运行过程中其值可能发生改变的量 关键词var定义变量,定义时直接进行求值 常量 immutable variable 在程序运行过程中其值不会 ...

  4. 学习java Markdown语法

    Markdown学习 标题: #+标题名字+回车 二级标题 ##+标题名字+回车 三级四级一次类推,最多六级 字体 HELLO,World ! HELLO,World ! HELLO,World ! ...

  5. Java学习路线图(如何快速学Java)

    不知不觉从初学Java到现在已经8年了,今天在这里给刚入门和入门不久的小伙伴们一些建议.可能总结的不是很详细,但给出了一个大概的学习路线.希望对大家有帮助哈~ 如何快速学Java 这里我以Java E ...

  6. 2018年如何快速学Java

    前言 只有光头才能变强 提前预警:本文适合Java新手阅读(老手可在评论区给下建议),希望大家看完能有所收获. 一.为什么我要写下这篇文章 1.1直接缘由: 在今天(2018年11月4日)有个同学给我 ...

  7. 零基础的人怎么学习Java

    编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...

  8. 第2天 第一个程序&IDEA安装&Java基础语法

    第一个程序 Hello,World! 随便新建一个文件夹,存放代码 新建一个Java文件 文件后缀名为java Hello.java [注意点]系统可能没有显示后缀名,必须手动打开 编写代码 publ ...

  9. 守护石谈学习Java之路

    ​这次在CSDN Blink发表了几篇关于Java编程学习的小作文,讲述了Java工程师的成长路线.Java学习的技能树和入门工作要关注的核心问题,我继续做一次文章的整合与延展,以文章的形式发表出来, ...

随机推荐

  1. C# 实现简单仿QQ登陆注册功能

    闲来没事,想做一个仿QQ登陆注册的winform,于是利用工作之余,根据自己的掌握和查阅的资料,历时4天修改完成,新手水平,希望和大家共同学习进步,有不同见解希望提出! 废话不多说,进入正题: 先来看 ...

  2. MVVM 简化的Messager类

    看MVVMLight的Messager源码,自己实现了一个简单的Messager类. Messager类可以在MVVM中,实现View与VM.VM与VM.View与View的通信. public cl ...

  3. 最值得拥有的免费Bootstrap后台管理模板

    在PHP开发项目中,后台管理因为面向群体相对比较固定,大部分以实现业务逻辑和功能.使用Bootstrap后台模板可以让后端开发很轻松的就展现给客户一个响应式的后台,节约前端开发的时间.下面PHP程序员 ...

  4. 556. Next Greater Element III

    Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly th ...

  5. linux 使用进程管理工具 supervisor

    1.supervisor是使用python进行开发的运行在linux服务器上的进程管理工具 老版本的supervisor需要运行在python2环境,如果需要使用supervisor管理python3 ...

  6. [原创]内网渗透JSP webSehll连接工具

    工具: JspShellExec编译: VS2012  C# (.NET Framework v2.0)组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.b ...

  7. 基于alpine用dockerfile创建的nginx镜像

    1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...

  8. 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第一周(Practical aspects of Deep Learning) —— 4.Programming assignments:Gradient Checking

    Gradient Checking Welcome to this week's third programming assignment! You will be implementing grad ...

  9. 课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 2、编程作业常见问题与答案(Programming Assignment FAQ)

    Please note that when you are working on the programming exercise you will find comments that say &q ...

  10. Git使用(3)

    1.查看本地和远程分支 git branch -a 删除本地分支 git branch -D branchName(D要大写) 删除远程分支 git push origin :branchName 2 ...