• lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。
  • Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。

  实现一个接口(功能接口)中的唯一方法(老办法):

    1、接口中的方法无返回值:

 package JDK8Test;
interface RunTask
{
void run();
}
public class Main
{ public static void main(String[] args)
{
RunTask r=new RunTask()
{
public void run()
{
System.out.println("我是线程要执行的任务");
}
};
r.run();
}
}

  首先要创建一个类,这个类实现了这个功能接口,然后在类中对方法进行实现。然后实例化一个这个类的对象r,由对象调用run()方法。(此处使用匿名内部类)

  Lambda表达式形式:

  Java提供了一个新的操作符"->" 这个操作符之前有一个括号,括号里面就是接口中的那个唯一的方法的参数列表,操作符后面就是我们以前实现接口中的方法中的语句,具体就以上面的代码为参照。

  使用前提:

  ①接口中就只有一个抽象方法,也就是我们刚刚定义的接口,里面就只能有一个抽象方法。

  2、接口中的方法有返回值:

 package JDK8Test;
interface RunTask
{
String run();
}
public class Main
{
public static void main(String[] args)
{
RunTask r=()->System.currentTimeMillis()%2==0?"当前的毫秒值能被2整除":"不能被2整除";
String value=r.run();
System.out.println(value);
}
}

  也就是说,如果返回值是一个String类型的,则”->”后面跟的就必须是一个字符串。调用run()方法时,返回的就是这个字符串。

  3、接口中的方法有参数:

 package JDK8Test;
interface RunTask
{
String run(String name);
}
public class Main
{
public static void main(String[] args)
{
RunTask r=(who)->who+"在调用我";
String value=r.run("Peter");
System.out.println(value);
}
} //输出 Peter在调用我

  操作符"->“前面的括号中写了一个参数的变量名,然后你可以看到这个变量在后面的语句中我们就可以使用了!方法中的参数接收一个String类型的,所以who这个变量就必须是字符串类型的,所以who前面可以加一个String。

  4、实现比较器接口:

 package JDK8Test;
import java.util.*; public class Main
{
public static void main(String[] args)
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(5);
list.add(8);
list.add(6);
System.out.println(list);
Collections.sort(list, (Integer a,Integer b)->a-b);
System.out.println(list);
}
}
//[5, 8, 6]
//[5, 6, 8]

  可以看得到”->" 操作符前面是接口中的方法的参数列表,后面是实现接口的方法中的表达式。

  5、实现Consumer接口,遍历集合(老方法):

 package JDK8Test;
import java.util.ArrayList;
import java.util.function.Consumer; public class Main
{
public static void main(String[] args)
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(5);
list.add(8);
list.add(6);
Two two=new Two();
list.forEach(two);
}
}
class Two implements Consumer<Integer>
{
public void accept(Integer t)
{
System.out.println("遍历中"+t);
}
}
/*输出:
遍历中5
遍历中8
遍历中6
*/

  Lambda表达式方法:

  

 package JDK8Test;
import java.util.ArrayList;
import java.util.function.Consumer; public class Main
{
public static void main(String[] args)
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(5);
list.add(8);
list.add(6);
Consumer<Integer> r=(Integer t)->System.out.println("遍历中"+t);
list.forEach(r);
}
}
/*输出:
遍历中5
遍历中8
遍历中6
*/

  5、”->”后面有{}包裹:

  

 package JDK8Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Consumer; public class Main
{
public static void main(String[] args)
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(5);
list.add(8);
list.add(6);
System.out.println(list);
Collections.sort(list, (Integer a,Integer b)->{return a-b;});
System.out.println(list);
}
}
/*输出:
[5, 8, 6]
[5, 6, 8]
*/

  没有{}和有{}的区别是:
  ①没有{}包裹的不用写return 关键字,有{}包裹的,如果有返回值,必须使用return 关键字返回数据
  ②没有{}包裹的只能写一个语句,而有{}包裹的可以写任意多条语句。

Java 8 Lambda表达式的使用的更多相关文章

  1. Java 8 Lambda表达式

    Java 8 Lambda表达式探险 http://www.cnblogs.com/feichexia/archive/2012/11/15/Java8_LambdaExpression.html 为 ...

  2. 深入浅出 Java 8 Lambda 表达式

    摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...

  3. Java 8 Lambda表达式10个示例【存】

    PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...

  4. Java 8 Lambda 表达式

    Lambda 是啥玩意 简单来说,Lambda 就是一个匿名的方法,就这样,没啥特别的.它采用一种非常简洁的方式来定义方法.当你想传递可复用的方法片段时,匿名方法非常有用.例如,将一个方法传递给另外一 ...

  5. Java 8 lambda表达式示例

    例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runna ...

  6. Java 8 Lambda 表达式详解

    一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...

  7. 用Java 8 Lambda表达式实现设计模式:命令模式

    在这篇博客里,我将说明如何在使用 Java 8 Lambda表达式 的函数式编程方式 时实现 命令 设计模式 .命令模式的目标是将请求封装成一个对象,从对客户端的不同类型请求,例如队列或日志请求参数化 ...

  8. Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...

  9. 02、Java的lambda表达式和JavaScript的箭头函数

    前言 在JDK8和ES6的语言发展中,在Java的lambda表达式和JavaScript的箭头函数这两者有着千丝万缕的联系:本次试图通过这篇文章弄懂上面的两个"语法糖". 简介 ...

  10. Java 8 Lambda表达式学习和理解

    Java 8 Lambda表达式和理解 说明:部分资料来源于网络 时间:20190704 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.Lambda 允许把函数作为一 ...

随机推荐

  1. SpringCloud 微服务一:spring boot 基础项目搭建

    spring cloud是建立在spring boot的基础上的,而之前虽然听说过,也随便看了一下spring boot,却没有真正使用,因此还必须先花时间学一下spring boot. spring ...

  2. Wordpress 文章添加副标题

    后台编辑区添加自定义副标题字段 /** * Add Subtitle in all post */ function article_subtitle( $post ) { if ( ! in_arr ...

  3. [译]tar打包时忽略某些文件夹内容

    使用tar的 --exclude的选项 $ tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.t ...

  4. Android之操作相册

    获取手机中的图片的绝对路径并且区分出每个文件夹下的路径: 存放图片绝对路径的文件夹的名字和存放绝对路径的List 实体类如下: import java.util.ArrayList; import j ...

  5. Spring4.0实战 rest相关

    package com.paic.pay.merchant.web; import com.paic.pay.merchant.entity.MerchantUser; import com.paic ...

  6. libcmt.lib和msvcrt.lib冲突,原因和解决方法

    libcmt.lib和msvcrt.lib冲突,原因和解决方法 https://blog.csdn.net/longlijun/article/details/7331093 libcmt.lib是w ...

  7. [NOI2011][bzoj2434] 阿狸的打字机 [AC自动机+dfs序+fail树+树状数组]

    题面 传送门 正文 最暴力的 最暴力的方法:把所有询问代表的字符串跑一遍kmp然后输出 稍微优化一下:把所有询问保存起来,把模板串相同的合并,求出next然后匹配 但是这两种方法本质没有区别,都是暴力 ...

  8. SQL死锁

    我们操作数据库大量数据时,可能会出现死锁现象. 所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统 ...

  9. char与byte的区别

    很多初学者(包括我,已经学了一年多java了)肯会对char和byte这两种数据类型有所疑惑,相互混淆,今天特地查了好多资料,对byte和char两种数据类型进行了总结和比较,先将结果与大家分享: b ...

  10. 提高Java开发效率,Idea必装的几款插件

    1.codeMaker 重复代码生成工具 domian和dto两个类基本差不多,这个工具就可以通过一个类快速生成另一个类. 2.gsonFormat json转换成Java类 很多时候根据别人接口给的 ...