1.java8 Lambda表达式语法简介 (此处需要使用jdk1.8或其以上版本)

Lambd表达式分为左右两侧
* 左侧:Lambda 表达式的参数列表
* 右侧:Lambda 表达式中所需要执行的功能, 即Lambda体

Lambda表达式需要“函数式接口”的支持
 函数式接口:接口中只有一个抽象方法的接口,成为函数式接口。 可以使用注解@FunctionalInterface 修饰接口类,因为此注解修饰的接口中只能声明一个抽象方法

2.常见函数式接口对应的Lambda表达式的demo

   /**
* 语法格式一:无参数,无返回值
* () -> System.out.println("hello Lambda");
*/
@Test
public void test1() {
int num = 0; //jdk1.7前,必须添加final jdk1.8默认添加了final Runnable r = new Runnable() { @Override
public void run() {
System.out.println("hello Lambda" + num);
}
};
r.run(); //lambda
Runnable r1 = () -> System.out.println("hello Lambda" + num);
r1.run();
} /**
* 语法格式二:有一个参数,无返回值
* (x) -> System.out.println(x);
*/
@Test
public void test2() {
Consumer<String> con = (x) -> System.out.println(x);
con.accept("hello test");
} /**
* 语法格式三:只有一个参数,无返回值小括号可以不写
* x -> System.out.println(x);
*/
@Test
public void test3() {
Consumer<String> con = x -> System.out.println(x);
con.accept("hello test");
} /**
* 语法格式四:两个参数 ,有返回值,Lambda体中多条语句
* (x, y) -> {
System.out.println("函数式接口");
return Integer.compare(x, y);
};
*/
@Test
public void test4() {
Comparator<Integer> com = (x, y) -> {
System.out.println("函数式接口");
return Integer.compare(x, y);
};
System.out.println(com.compare(2, 1));
} /**
* 语法格式五:两个参数 ,有返回值,Lambda体中只有1条语句, 大括号和返回值可以不写
* (x, y) -> Integer.compare(x, y);
*/
@Test
public void test5() {
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
System.out.println(com.compare(2, 1));
} /**
* 语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为jvm编译器通过上下文推断出数据类型,即“类型推断”
* (Integer x, Integer y) -> Integer.compare(x, y);
* (x, y) -> Integer.compare(x, y);
*/
@Test
public void test6() {
Comparator<Integer> com = (Integer x, Integer y) -> Integer.compare(x, y);
System.out.println(com.compare(2, 1));
}

3.Lambda表达式练习题

练习题1

//对一个数进行运算
@Test
public void test7() {
//求10的平方
Integer num = operation(10, (x) -> x*x);
System.out.println(num); //求3+2
System.out.println(operation(3, y -> y+2));
} //运算
public Integer operation(Integer number, OperationInterface operationInterface) {
return operationInterface.getValue(number);
}
@FunctionalInterface
public interface OperationInterface { Integer getValue(Integer number);
}

练习题2

List<Employee> emps = Arrays.asList(
new Employee("张三", 18, 8888.88),
new Employee("李四", 20, 9999.99),
new Employee("王五", 22, 5555.55),
new Employee("赵六", 18, 6666.66)
); /*1.调用Collections.sort()方法,通过定制排序比较两个Employee(先按年龄比,年龄相同
的按姓名比),使用Lambda作为参数传递*/
@Test
public void test1(){
Collections.sort(emps, (x, y) -> {
if (x.getAge() == y.getAge()) {
return x.getName().compareTo(y.getName());
}else{
return Integer.compare(x.getAge(), y.getAge());
}
}); for(Employee emp : emps){
System.out.println(emp.getName()+","+emp.getAge());
}
} /*2.声明一个带两个翻下的函数式接口,泛型类型为<T, R> T为参数, R为返回值
接口中声明对应的抽象方法
在TestLambda2类中声明方法,使用接口作为参数,计算两个long型参数的和
计算两个long型参数的乘积*/
@Test
public void test2(){
//计算两个数的和
calculate(10, 10, (x, y) -> x+y); //计算两个数的乘积
calculate(10, 10, (x, y) -> x*y);
} public void calculate(long t1, long t2, MyFunction<Long, Long> mf){
long va = mf.getValue(t1, t2);
System.out.println(va);
}
@FunctionalInterface
public interface MyFunction<T, R> { public R getValue(T t1, T t2);
}

Lambda 语法的更多相关文章

  1. SQL,LINQ,Lambda语法对照图(转载)

    如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...

  2. Lisp使用Lambda语法

    lamdba 其实就是一个匿名函数. 定义Lisp的lambda语法非常的简单,如下: (lambda ([parameter]) [experssion]) 调用lambda的语法有三种方法,如下: ...

  3. 初探Lambda表达式/Java多核编程【3】Lambda语法与作用域

    接上一篇:初探Lambda表达式/Java多核编程[2]并行与组合行为 本节是第二章开篇,前一章已经浅显地将所有新概念点到,书中剩下的部分将对这些概念做一个基础知识的补充与深入探讨实践. 本章将介绍L ...

  4. Lambda语法篇

    函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口. Lambda语法 包含三个部分 一个括号内用逗号分隔 ...

  5. 通过这些示例快速学习Java lambda语法

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

  6. jdk1.8的lambda语法(转)

    原文链接:http://www.jb51.net/article/115081.htm 代码: package com.jdk_8; import org.junit.Test; import jav ...

  7. java1.8学习-什么样的匿名内部类能被lambda语法代替?

    java1.8学习-什么样的匿名内部类能被lambda语法代替? java1.8好多新的特性真的很有意思,特别是Lambda.在学习的时候发现并不是所有的匿名内部类都可以用Lambda代替. lamb ...

  8. C#在属性中用Lambda语法

    今天看代码改功能的时候遇到了个比较奇怪的地方,在属性里也能用Lambda,我看了好久,也不是很理解,我都开始怀疑这是不是属性了,又在群里讨论了下这个问题,觉得有必要记下来,因为又涨知识了. 问题1:这 ...

  9. J2SE 8的Lambda --- 语法

    语法例子 LambdaGrammarTest lambdaTest = new LambdaGrammarTest(); // 1. 能够推导出类型的,可以不写类型 String[] planets ...

随机推荐

  1. AppCompatActivity 透明背景

    <!-- 背景透明样式 --> <style name="AppTheme.transparent" parent="Theme.AppCompat.L ...

  2. nc命令的用法

    1.什么是nc netcat(nc)是一个简单而有用的工具,可以使用tcp或者udp进行网络间读写数据,传输文件,接收发送数据,验证网络是否畅通. 2.命令行: 1) -l 用于指定nc将处于侦听模式 ...

  3. Memcache工作原理

    1       Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的 ...

  4. python实现使用代码进行代理配置

    #!/usr/local/bin/python3.7 import urllib.request import urllib.parse # 创建handler handler = urllib.re ...

  5. 四剑客(find&grep)

    一.find 简介: find相关:条件匹配表达式.选项表达式.动作表达式.组合条件表达式 1.1.语法格式 find   path   -option   [   -print ]   [ -exe ...

  6. 专利|Pct||

    专利:有些专利写的尽量模糊,为了不让别人检出,让别人能轻易侵犯专利权 优先权:在本国申请后,在他国也是同一个专利人申请,并也是同一个申请日. 发明20年:实用新型外观设计:20年 Pct:专利合作条约 ...

  7. MySQL性能优化的21条最佳经验

    英文原文:<Top 20+ MySQL Best Practices>,编译:陈皓 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只 ...

  8. cs231n spring 2017 lecture7 Training Neural Networks II

    1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...

  9. Java枚举的作用和用法

    从没有枚举的时代说起 在枚举出现之前,如果想要表示一组特定的离散值,往往使用一些常量.例如: [Java] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 ...

  10. 为什么说iPhone无望恢复中国市场?

    直到现在还记得,iPhone 4在国内当时引发的追捧狂潮.彼时iPhone 4绝对是一机难求,上至土豪下至学生都以拥有iPhone 4为荣.发售接近一年后仍然需要加价,价格动辄达到七八千元,真正成为了 ...