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表达式的更多相关文章

  1. java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合

    java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ...

  2. Java8 新特性学习 Lambda表达式 和 Stream 用法案例

    Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...

  3. Java8新特性之Lambda表达式

    lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让我们的java程序设计更加简洁.最近新的项目摒弃了1.6的版本,全面基于java8进行开发,本文是java ...

  4. Java8 新特性之Lambda表达式

    1. Lambda 表达式概述 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递); Lambda 表达式可以写出更简洁,更灵活的代码 ...

  5. 夯实Java基础(二十二)——Java8新特性之Lambda表达式

    1.前言 Java 8于14年发布到现在已经有5年时间了,经过时间的磨练,毫无疑问,Java 8是继Java 5(发布于2004年)之后的又一个非常最重要的版本.因为Java 8里面出现了非常多新的特 ...

  6. 【Java8新特性】Lambda表达式基础语法,都在这儿了!!

    写在前面 前面积极响应读者的需求,写了两篇Java新特性的文章.有小伙伴留言说:感觉Lambda表达式很强大啊!一行代码就能够搞定那么多功能!我想学习下Lambda表达式的语法,可以吗?我的回答是:没 ...

  7. 【Java8新特性】Lambda表达式

    一.Lambda 表达式 是什么? Lambda读音:拉姆达. Lambda是一个匿名函数,匿名函数就是一个没有名字的函数. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). ...

  8. 【Java8新特性】- Lambda表达式

    Java8新特性 - Lambda表达式 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...

  9. java8新特性之——lambda表达式的使用

    lambda表达式简介 个人理解,lambda表达式就是一种新的语法,没有什么新奇的,简化了开发者的编码,其实底层还是一些常规的代码.Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解 ...

  10. Java8 新特性(一)- Lambda 表达式

    2014年3月18日发布了JavaSE 8 不追求技术的新,追求技术的稳定 本质:Lambda 表达式是一个匿名函数 作用:简化代码,增强代码的表达力 Lambda 语法格式 // 格式1:无参无返回 ...

随机推荐

  1. iview中 ...用法

    1. 2. 3. 4.可以将divs转为数组解构 5. 解构 6.作为函数的参数 7.作为参数遍历

  2. struts2中标签库访问静态成员

    struts2中是可以访问静态成员的,需要以下设置: 1.设置配置文件 struts.xml 中如下: <!-- 设置运行通过ONGL访问静态方法 --> <constant nam ...

  3. 洛谷 P2486 [SDOI2011]染色 LCT

    Code: #include <cstdio> //SDOI2010 染色 #include <algorithm> #include <cstring> #inc ...

  4. PHP -Casbin: 支持 ACL、RBAC、ABAC 多种模型的 PHP 权限管理框架

    PHP-Casbin 是一个用 PHP 语言打造的轻量级开源访问控制框架( https://github.com/php-casbin... ),目前在 GitHub 开源.PHP-Casbin 采用 ...

  5. caioj 1073 动态规划入门(三维一边推:最长公共子序列加强版(三串LCS))

    三维的与二维大同小异,看代码. #include<cstdio> #include<cstring> #include<algorithm> #define REP ...

  6. Unity 给FindGameObjectsWithTag排序

    GameObject[] patrol = GameObject.FindGameObjectsWithTag ("Player").OrderBy (g => g.tran ...

  7. 内存,寄存器和cache的区别与联系

    1. 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC).在中央处理器的 ...

  8. KM HDU 3718

    #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...

  9. 实习第一天(安装svn管理工具跟tomcat插件)

    在eclipse中安装svn管理解压工具是有好几种方法. 方法1 1>可以直接下载svn插件subclipse,之后进行解压 2>然后将将插件包features和plugins目录中的文件 ...

  10. Process Monitor —— 程序(文件和注册表)监控

    下载地址:Process Monitor v3.33 通过追踪 Process Monitor 的日志,我们可以确认某程序的行为: