java 8之Lambda Expressions 解说

java 8之Lambda Expressions 解说

java 8 新增Lambda Expressions 的目的:为了使代码简洁易读和消除过多的冗余代码(尽量让编译器做代码转换工作,也可以认为是语法糖之类的作用)。

使用过c、c++语言的人,都记得,他们的函数参数可以是函数指针即代码片段(某些行为),而在java语言中,要想使得函数为参数,必须把函数封装成对象,以对象传参才可以。而 java 8 新增Lambda Expressions 使得这一现状得到缓解(函数式变成、闭包之类的概念都是在传递行为,而非对象)。

看一下代码实例:

package com.doctor.lambda;

import java.util.function.BinaryOperator;
import java.util.function.Consumer;

/**
 * @author sdcuike
 *
 *         Created on 2016年6月7日 上午12:03:18
 */
public class Demo1 {

    public static void main(String[] args) {
        Runnable runnable = () -> System.out.println("test lambda");
        new Thread(runnable).start();

        String msg = "hello ";
        runnable = () -> {
            System.out.println(msg);
            System.out.println("run 1");
            System.out.println("run 2");
        };

        new Thread(runnable).start();
        Consumer<String> consumer = message -> System.out.println(message);
        consumer.accept("hello java lambda ");

        BinaryOperator<Long> add = (a, b) -> a + b;
        System.out.println(add.apply(66L, 22L));
        add = (Long a, Long b) -> a + b;
        System.out.println(add.apply(66L, 33L));
    }

}

以前,java中方法的参数大多为特殊的匿名类对象(接口内只有一个抽象方法 -Functional Interfaces

-A functional interface is an interface with a single abstract method that is used as the type of a lambda expression.) 。java 的 Lambda 简化了语法,不必显示new 匿名类对象,而是(参数)->
{方法体} 的形式,参数如果只为一个参数,可以省去参数两侧的{},同样,方法体内只有一条语句,也可以省略{}。参数的类型同样可以省略,由编译器推导(实在推导不出,我们写上参数类型给编译器提示如何处理-Type
Inference
),还是记住那句话:能省则省。

如果,方法体内使用了方法体外的变量,则这个变量编译器认为是final的,这和我们之前使用匿名类的规则一样,不过,java8语法对这一限制放松了,变量不必是final的,但必须是有效的final变量。

时间: 2024-11-05 20:30:43

java 8之Lambda Expressions 解说的相关文章

Java 8 Lambda Expressions by Examples

Ever since I heard Java 8 is going to support lambda expressions (aka closures), I was very enthusiastic to spice my code with such a decent and concise functional element. Most developers extensively use Anonymous Inner Classes for event handlers, c

Hacking Lambda Expressions in Java

Hacking Lambda Expressions in Javahttps://dzone.com/articles/hacking-lambda-expressions-in-java At the bytecode level, a lambda expression is replaced with an invokedynamic instruction. This instruction is used to create implementations of a function

【转】Java 8十个lambda表达式案例

1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8 "); } }).start(); //Java 8 way: new Thread( () -> System.out.println("In Java8!") ).s

jdk8新特性之lambda expressions

本文分两部分: 语法简单说明 lambda的使用 注:这两部分内容均以类+注释的方式进行说明,并且内容均来自官方教程(https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html). 第一部分: /** * 语法说明类 * * lambda表达式包含下面几个要素: * 1.逗号分隔的参数列表,如CheckPerson.test(Person p),其中p表示一个Person的对象实例 * 2.向右箭头 →,

Lambda Expressions 笔记

随Java 8发布,"The Java(TM) Tutorials"增加了关于“Lambda Expressions”的教程.本文是此教程的总结.摘要. 一.Lambda的实质是一个匿名类 二.Lambda公式只能实现 functional 接口: 1. 只有一个虚方法的借口,叫做 functional 接口: 2. functional 接口中可以有一个或多个默认方法和静态方法. 三.Lambda公式的格式 例如: p -> p.getGender() == Person.Se

lambda expressions

lambda: Java lambda表达式是Java 8中的新增功能.Java lambda表达式是Java进入函数式编程的第一步.因此,Java lambda表达式是一个可以在不属于任何类的情况下创建的函数.Java lambda表达式可以作为对象传递,并按需执行. Java lambda表达式通常用于实现简单的事件侦听器/回调,或者使用Java Streams API进行函数式编程. lambda expressions的使用: 很多时候我们在使用Lambda表达式查询时,比如使用Lamb

java 8 中lambda表达式学习

转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-of-lambda-expressions-in-java8.html Lambda表达式的语法基本语法:(parameters) -> expression或(parameters) ->{ statements; } 下面是Java lambda表达式的简单例子: // 1. 不需要参数,返回值

Java 8之Lambda

公司内部的一些新项目相继采用了Java 8,这才有了动力好好的研究一下Java 8这个传说中的大杀器.Java 8文档里面提到的第一个改进就是Lambda,就从它入手好了.社区好多大神都已经研究几年了,拜一下.有不准确的地方,望指正. 为什么要Lambda 把Java代码写得更简洁一点,更直白来说,就是写出来的代码篇幅更短.那么简单?核心来说,是的,不过可能额外带来一些好处.理论上来说,Lambda不是必需品,有了写的代码更优雅简练.Java最被诟病的问题之一就是代码量大(很多是无用的,只是语法

【Java基础】Java面试题目整理与解说(二)

1.Collection 和 Collections 的差别. Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作. 2.HashMap 和 Hashtable 的差别. HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完毕了 Map 接口,HashMap是非线程安全,效率上可能高于 Hashtable.在多个线程