java 8新特性学习系列(4):Lambda表达式

Java 8 Lambda表达式

Lambda 表达式,也可以称为闭包,他是Java 8最重要的特性.
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中).
使用Lambda表达式可以使代码简洁紧凑.

语法

(parameters) -> expression
或
(parameters) ->{ statements; }

重要特性

  • 可选类型声明:不需要声明参数类型,编译器统一识别参数值.
  • 可选的参数圆括号:一个参数无需定义圆括号
  • 可选的大括号:如果主题包含了一个语句,就不需要使用大括号.
  • 可选的返回关键字
    表达式实例:
//1.不需要参数,返回
() -> 5

//2.接收一个参数(数字类型),返回
x -> 2 * x

//3.接收两个参数(数字),返回
(x,y) -> x - y

//4.接收两个参数(数字)返回
(x,y) -> x + y

//5.接收一个 String 对象,并在控制台打印
(String s) -> System.out(s)
  @Test
    public void fl(){
        Moth m1 =(int a,int b) -> a+b;
        int fun = m1.fun(2, 3);
        System.out.println(fun);
    }
    
    interface Moth{
        int fun(int x,int y);
    }
  • Lambda 表达式主要用来定义行内执行的方法类型接口.例如上边的例子.
  • Lambda表达式免去了使用匿名函数的麻烦,并且给予java简单但是强大的函数化编程能力.

可以在Lambda表达式中访问外层的局部变量:


public class Java8Tester {
    public static void main(String args[]) {
        final int num = 1;
        Converter<Integer, String> s = (param) -> System.out.println(String.valueOf(param + num));
        s.convert(2);  // 输出结果为 3
    }
 
    public interface Converter<T1, T2> {
        void convert(int i);
    }
}

在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。

String first = "";  
Comparator<String> comparator = (first, second) -> Integer.compare(first.length(), second.length());  //编译会出错 

lambda 表达试,简单的讲就是匿名函数.
示例如下:

 @Test
    public void fl2() {

        // 测试功能型
        // 平方
        Integer aInteger = new Integer(12);
        String string = "outerline";
        Function<Integer, Integer> function = a -> {
            return a * a;
        };
        System.out.println("功能型接口  :" + function.apply(aInteger));


        // 测试供给型接口
        // 生成一个随机数
        Supplier<Integer> supplier = () -> {
            Random random = new Random();
            return random.nextInt(45);
        };
        System.out.println("供给型接口  " + supplier.get());


        // 断言式接口
        // 判断一个数是否大于0
        Predicate<Integer> predicate = a -> {
            return a > 0;
        };
        System.out.println("断言式接口  " + predicate.test(18));


        Predicate<String> p = a -> {
            return a.length() > 4;
        };


        // 消费性接口
        // 输出输入的参数
        Consumer<String> consumer = a -> {
            System.out.println("消费性接口内部  " + a.length() + "  " + string);
        };
        System.out.println("调用消费性接口");
        consumer.accept("xiaofeixingjiekoucanshu");
    }
    //功能型接口  :144
	//供给型接口  26
	//断言式接口  true
	//调用消费性接口
	//消费性接口内部  23  outerline
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值