java8新增特性(一)---Lambda表达式
Lambda表达式也成为闭包,是java语言层次上的改变,Lambda同意把函数作为一个方法的參数(函数作为參数传递进方法中),或者把代码看成数据。函数式程序猿对这一概念非常熟悉。
在JVM平台上有非常多语言(groovy,scala等等)从一開始就有Lambda,可是程序猿不得不使用匿名类来取代lambda。
看一下jdk7之前实现字符串排序:
package com.panther.dong.java8.lambda; import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; /**
* Created by panther on 15-8-22.
*/
public class Old { public static void main(String[] args) {
List<String> nameList = Arrays.asList("panther","peter","lucy","jake");
Collections.sort(nameList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
System.out.println(nameList); }
}
执行结果:
仅仅须要给静态方法传入一个List对象以及一个比較器来按制定顺序排列,通常的方法是创建一个匿名的比較器对象然后将其传递给sort方法。
看一下java8怎么用lambda实现上述功能:
package com.panther.dong.java8.lambda; import java.util.Arrays;
import java.util.Collections;
import java.util.List; /**
* Created by panther on 15-8-22.
*/
public class New { public static void main(String[] args) {
List<String> nameList = Arrays.asList("panther", "peter", "lucy", "jake");
//第一种写法
Collections.sort(nameList, (String a, String b) -> {
return b.compareTo(a);
});
//另外一种写法
Collections.sort(nameList, (a, b) -> {
return b.compareTo(a);
});
//第三种写法
Collections.sort(nameList, (a, b) -> b.compareTo(a)); nameList.forEach(e -> System.out.println(e));
}
}
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
java编译器能够自己主动推导出參数类型。所以你能够不用再写一次类型!!!!
看以下lambda的样例:
代码:
package com.panther.dong.java8.lambda; import java.util.Arrays;
import java.util.List; /**
* Created by panther on 15-8-22.
*/
public class LambdaTest {
public static String separator = ","; public static void main(String[] args) {
//Lambda能够把函数体放到一对花括号里,就像在java中定义普通函数那样
System.out.println("-----Lambda Test1-----");
Arrays.asList("a", "b", "c", "d").forEach(e -> {
System.out.println(e);
}); //Lambda能够引用类的成员变量和局部变量(假设变量不是final的话,它会被隐含的转为final。这样效率更高)
System.out.println("--------Lambda Test2--------");
Arrays.asList("a", "b", "c", "d").forEach((String e) -> System.out.println(e + LambdaTest.separator)); System.out.println("--------Lambda Test3---------");
List<String> resultList = Arrays.asList("a", "c", "b", "d");
resultList.sort((e1, e2) -> {
int result = e1.compareTo(e2);
return result;
}); resultList.forEach(e -> {
System.out.println(e);
});
}
}
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
Lambda表达式介绍完成。!!!
~~~~~
java8新增特性(一)---Lambda表达式的更多相关文章
- java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合
java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ...
- Java8 新特性学习 Lambda表达式 和 Stream 用法案例
Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...
- Java8新特性之Lambda表达式
lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让我们的java程序设计更加简洁.最近新的项目摒弃了1.6的版本,全面基于java8进行开发,本文是java ...
- Java8 新特性之Lambda表达式
1. Lambda 表达式概述 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递); Lambda 表达式可以写出更简洁,更灵活的代码 ...
- 夯实Java基础(二十二)——Java8新特性之Lambda表达式
1.前言 Java 8于14年发布到现在已经有5年时间了,经过时间的磨练,毫无疑问,Java 8是继Java 5(发布于2004年)之后的又一个非常最重要的版本.因为Java 8里面出现了非常多新的特 ...
- 【Java8新特性】Lambda表达式基础语法,都在这儿了!!
写在前面 前面积极响应读者的需求,写了两篇Java新特性的文章.有小伙伴留言说:感觉Lambda表达式很强大啊!一行代码就能够搞定那么多功能!我想学习下Lambda表达式的语法,可以吗?我的回答是:没 ...
- 【Java8新特性】Lambda表达式
一.Lambda 表达式 是什么? Lambda读音:拉姆达. Lambda是一个匿名函数,匿名函数就是一个没有名字的函数. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). ...
- 【Java8新特性】- Lambda表达式
Java8新特性 - Lambda表达式 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...
- java8新特性之——lambda表达式的使用
lambda表达式简介 个人理解,lambda表达式就是一种新的语法,没有什么新奇的,简化了开发者的编码,其实底层还是一些常规的代码.Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解 ...
- Java8 新特性(一)- Lambda 表达式
2014年3月18日发布了JavaSE 8 不追求技术的新,追求技术的稳定 本质:Lambda 表达式是一个匿名函数 作用:简化代码,增强代码的表达力 Lambda 语法格式 // 格式1:无参无返回 ...
随机推荐
- 木马——本质就是cs socket远程控制,反弹木马是作为c端向外发起网络请求
摘自:http://kczxsp.hnu.edu.cn/upload/20150504165623705.pdf 里面对于木马的实验过程写得非常清楚,值得一看. 木马是隐藏在正常程序中的具有特殊功 ...
- 38.angular的scope作用域
转自:https://www.cnblogs.com/best/tag/Angular/ 1. Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. S ...
- jsp输出九九乘法表
<% String st = ""; for(int i = 1; i <= 9; i++){ for(int j = 1; j <= i; j++){ st + ...
- 继承—people
public class People { private double height;//身高 private double weight;//体重 public double getHeight( ...
- Python3基础笔记---re模块
参考博客: Py西游攻关之模块 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列 ...
- CentOS6.9下sftp配置和scp用法
基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录). 1.如果只想让某些用户只能使用 sftp 操作文件, 而不能通过ssh进行服 ...
- jQuery实现tab标签切换效果
技巧一.jQuery :eq() 选择器 定义和用法 :eq() 选择器选取带有指定 index 值的元素. index 值从 0 开始,所有第一个元素的 index 值是 0(不是 1). 经常与其 ...
- Git 如何把master的内容更新到分支
Background: 当有人对master进行更新之后,你想让已经创建的分支内容更新到master的最新状态, bpan@5CG7022BM2 MINGW64 /d/GitRep/JIRA_Exte ...
- 思考一下activity的启动模式
在android里,有4种activity的启动模式.分别为:"standard" (默认) "singleTop" "singleTask" ...
- 6个技巧加速你的gradle编译
近期我们都在讨论build系统,我们看了一些技巧能够让你的Maven build更快. 结论和反映都势不可挡.由于我们提供的技巧,很多其它的人都非常高兴能加快他们完毕自己的项目.如今,让我们看一下怎么 ...