在说Lambda表达式之前,先介绍一下函数式接口

函数式接口

就是只定义了一个抽象方法的接口,我们可以使用注解@Functionallnterface,来强约束这种接口为函数式接口。如Runnable、Callable、Comparator等接口。

Java内置的四大函数式接口:Consumer<T>,Supplier<T>,Function<T,R>,Predicate<T>。
Lambda表达式就是专门用来实现这些函数式接口的表达式。

@FunctionalInterface
public interface Runnable {
public abstract void run();
}

以Runnbale线程为例

Runnable runnable = new Runnable()
{
@Override
public void run()
{
System.out.println("hello lambda!");
}
};
new Thread(runnable).start();

用Lambda表达式则可修改为:

Runnable runnable = ()->{   
System.out.println("hello lambda!");
};
new Thread(runnable).start();

其中参数列表:与接口中方法的参数列表要求一致。

Lambda特点总结

  • 参数列表中的参数类型可以直接都忽略掉不写。(注意是参数类型,不是参数。因为因为JVM编译器通过上下文推断出数据类型)
  • 如果只有一个参数,圆括号也可以省略
  • 方法体如果只有一语句,可以省略掉大括号
  • 如果仅有一条语句,并且他是return语句的话,那么可以直接省略掉return关键字

示例

语法一:无参数,且无返回值类型

public void test() {
Runnable runnable = new Runnable() {
@Override
public void run() {
    System.out.println("Hello Lambda!");
}
};
runnable.run();
}
/**
* () -> System.out.println("Hello Lambda!");
*/public void test() {
// "->" 左边只有一个小括号,表示无参数,右边是Lambda体(相当于实现了匿名内部类里面的方法了,即一个可用的接口实现类了)
Runnable runnable = ()->System.out.println("Hello Lambda!");
runnable.run();
}

语法二:一个参数,且无返回值类型

/**
* (x) -> System.out.println(x)
*/
public void test() {
  //这个e就代表所实现的接口的方法的参数
  Consumer<String> consumer = (e)->System.out.println("Hello"+e);
  consumer.accept("Lambda");
}
/**
* x -> System.out.println(x)
* 一个参数的话“()”可以省略
*/
public void test() {
  //这个e就代表所实现的接口的方法的参数
  Consumer<String> consumer = e->System.out.println("Hello"+e);
  consumer.accept("Lamdba");
}

语法三:两个以上的参数,且有返回值,且 Lambda 体中有多条语句

public void test4() {
  //Lambda 体中有多条语句,要用大括号括起来
  Comparator<Integer> com = (x, y) -> {
    System.out.println("函数式接口");
    return Integer.compare(x, y);
  };
  int compare = com.compare(, );
  System.out.println(compare);
}

Lambda表达式(JDK8)的更多相关文章

  1. jdk8 Lambda表达式与匿名内部类比较

    Labmda表达式与匿名内部类 前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖, ...

  2. JDK8 的 Lambda 表达式原理

    JDK8 使用一行 Lambda 表达式可以代替先前用匿名类五六行代码所做的事情,那么它是怎么实现的呢?从所周知,匿名类会在编译的时候生成与宿主类带上 $1, $2 的类文件,如写在 TestLamb ...

  3. jdk8的新特性 Lambda表达式

    很多同学一开始接触Java8可能对Java8 Lambda表达式有点陌生. //这是一个普通的集合 List<Employee> list = em.selectEmployeeByLog ...

  4. JDK8的新特性——Lambda表达式

    JDK8已经发布快4年的时间了,现在来谈它的新特性显得略微的有点“不合时宜”.尽管JDK8已不再“新”,但它的重要特性之一——Lambda表达式依然是不被大部分开发者所熟练运用,甚至不被开发者所熟知. ...

  5. jdk8新特性-亮瞎眼的lambda表达式

    jdk8之前,尤其是在写GUI程序的事件监听的时候,各种的匿名内部类,大把大把拖沓的代码,程序毫无美感可言!既然Java中一切皆为对象,那么,就类似于某些动态语言一样,函数也可以当成是对象啊!代码块也 ...

  6. JDK8 新特性 Lambda表达式

    1.java8中Lambda表达式基础语法: (x,y) -> {} 左侧是一个小括号,里面是要实现的抽象方法的参数,有几个参数就写几个参数名,无参可写空括号,无需声明参数类型: 中间是一个jd ...

  7. JDK8新特性之Lambda表达式

    Lambda表达式主要是替换了原有匿名内部类的写法,也就是简化了匿名内部类的写法.lambda语法结构: (参数1,参数2...)->{重写方法的内容,不定义方法名} 先看一个使用匿名内部类定义 ...

  8. (二)jdk8学习心得之Lambda表达式

    二.Lambda表达式 1. 格式 (参数1,参数2,…,参数n)->{方法体} 注意: (参数1,参数2,...,参数n)要与方法接口中的参数一致,但是名字可以不一样. 此外,方法类型接口,有 ...

  9. JDK8新特性02 Lambda表达式02_Lambda语法规则

    //函数式接口:只有一个抽象方法的接口称为函数式接口. 可以使用注解 @FunctionalInterface 修饰 @FunctionalInterface public interface MyF ...

  10. JDK8新特性01 Lambda表达式01_设计的由来

    1.java bean public class Employee { private int id; private String name; private int age; private do ...

随机推荐

  1. [LC] 1002. Find Common Characters

    Given an array A of strings made only from lowercase letters, return a list of all characters that s ...

  2. 计划任务crond

    计划任务服务程序 计划任务分为以下两种情况:1.系统级别的定时任务:清理系统缓存临时文件清理系统信息采集日志文件切割 2.用户级别的定时任务:定时同步互联网时间定时备份系统配置文件定时备份数据库文件 ...

  3. Windows下 webstorm安装tomcat配置svn并使用

    先附上所需要的软件的下载地址:https://pan.baidu.com/s/1c2ripd2 1.下载并安装jdk以及配置jdk的环境变量 1)下载jdk,选择安装目录安装,我选择的是默认路径,安装 ...

  4. swagger-ui不显示问题定位

    1. 现象1 正常情况是 group会显示default/v2/api-docs 不知道是什么原因, 一个app可以展示,但另一个app不展示,配置也基本相同 1.1 定位过程 正常的app访问时的结 ...

  5. Linux下安装mysql(yun方式)

    1.进入下载好的mysql版本 cd /usr/local/mysql 2.解压安装包 tar -xzvf mysql-5.7.11.tar.gz 3.改名 直接改或者 mv  文件名 要改的文件名m ...

  6. every|each|the用于姓氏的复数形式|comrades-in-arms|clothes are|word|steel|affect|effect

    ________ man in the crowd raised his hand.  A. All  B. Each  C. Every  D. Both 题目解析 考查代词的用法.此句意思是:人群 ...

  7. 【Linux_Shell 脚本编程学习笔记六、shell的数值运算】

    1.bc 命令的用法(可以整数也可以小数): bc是 UNIX下的计算器,它也可以用在命令行下面: 例: 给自变量 i 加 1 [root@docker Demo_test]# i= [root@do ...

  8. spring:事务的5大隔离级别,7大传播行为

    一.五大隔离级别 ISOLATION_READ_UNCOMMITTED:读未提交 ISOLATION_READ_COMMITTED:读已提交 ISOLATION_REPEATABLE_READ:可重复 ...

  9. 一、美国国家经济研究局NBER教育经济研究项目工作论文合集

    一.美国国家经济研究局NBER教育经济研究项目工作论文合集 (一)项目地址: American National Bureau of Economic Research - Economics of ...

  10. JS一维数组、多维数组和对象的混合使用

    转载地址:http://blog.csdn.net/wangyuchun_799/article/details/38460515 引言 这篇文章的主要目的是讲解JavaScript数组和对象的混合使 ...