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));
    }
}

运行结果:


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);
        });
    }
}

运行结果:


Lambda表达式介绍完毕!!!!~~~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值