Java8中的Lambda表达式

news/2024/7/19 13:45:29 标签: java, lambda, 接口, 编程语言, js

Lambda表达式基本上表示函数式接口的实例(具有单个抽象方法的接口称为函数接口)。一个例子是( java.lang.Runnable ).lambda表达式实现唯一的抽象函数

关于函数式接口参考这篇文章:Java8中的函数式接口

lambda表达式是在java8中添加的,并提供以下功能。

  • 允许将功能视为方法参数,或将代码视为数据。
  • 可以不属于任何类而创建的函数。
  • lambda表达式可以像传递对象一样传递,并根据需要执行。
// Java program to demonstrate lambda expressions 
// to implement a user defined functional interface. 
  
// A sample functional interface (An interface with 
// single abstract method 
interface FuncInterface 
{ 
    // An abstract function 
    void abstractFun(int x); 
  
    // A non-abstract (or default) function 
    default void normalFun() 
    { 
       System.out.println("Hello"); 
    } 
} 
  
class Test 
{ 
    public static void main(String args[]) 
    { 
        // lambda expression to implement above 
        // functional interface. This interface 
        // by default implements abstractFun() 
        FuncInterface fobj = (int x)->System.out.println(2*x); 
  
        // This calls above lambda expression and prints 10. 
        fobj.abstractFun(5); 
    } 
}

输出:

语法:

lambda operator -> body

其中lambda操作符可以是:

零参数:

() -> System.out.println("Zero parameter lambda");

一个参数:

(p) -> System.out.println("One parameter: " + p);

如果可以从上下文推断出变量的类型,则不必使用括号

多个参数:

(p1, p2) -> System.out.println("Multiple parameters: " + p1 + ", " + p2);

请注意:Lambda表达式就像函数一样,它们接受参数就像函数一样。

// A Java program to demonstrate simple lambda expressions 
import java.util.ArrayList; 
class Test 
{ 
    public static void main(String args[]) 
    { 
        // Creating an ArrayList with elements 
        // {1, 2, 3, 4} 
        ArrayList<Integer> arrL = new ArrayList<Integer>(); 
        arrL.add(1); 
        arrL.add(2); 
        arrL.add(3); 
        arrL.add(4); 
  
        // Using lambda expression to print all elements 
        // of arrL 
        arrL.forEach(n -> System.out.println(n)); 
  
        // Using lambda expression to print even elements 
        // of arrL 
        arrL.forEach(n -> { if (n%2 == 0) System.out.println(n); }); 
    } 
}

输出:

注意lambda表达式只能用于实现函数接口。在上面的示例中,lambda表达式还实现了 Consumer 函数接口

一个Java程序来演示两个参数的lambda表达式的工作。

// Java program to demonstrate working of lambda expressions 
public class Test 
{ 
    // operation is implemented using lambda expressions 
    interface FuncInter1 
    { 
        int operation(int a, int b); 
    } 
  
    // sayMessage() is implemented using lambda expressions 
    // above 
    interface FuncInter2 
    { 
        void sayMessage(String message); 
    } 
  
    // Performs FuncInter1's operation on 'a' and 'b' 
    private int operate(int a, int b, FuncInter1 fobj) 
    { 
        return fobj.operation(a, b); 
    } 
  
    public static void main(String args[]) 
    { 
        // lambda expression for addition for two parameters 
        // data type for x and y is optional. 
        // This expression implements 'FuncInter1' interface 
        FuncInter1 add = (int x, int y) -> x + y; 
  
        // lambda expression multiplication for two parameters 
        // This expression also implements 'FuncInter1' interface 
        FuncInter1 multiply = (int x, int y) -> x * y; 
  
        // Creating an object of Test to call operate using 
        // different implementations using lambda Expressions 
        Test tobj = new Test(); 
  
        // Add two numbers using lambda expression 
        System.out.println("Addition is " + 
                          tobj.operate(6, 3, add)); 
  
        // Multiply two numbers using lambda expression 
        System.out.println("Multiplication is " + 
                          tobj.operate(6, 3, multiply)); 
  
        // lambda expression for single parameter 
        // This expression implements 'FuncInter2' interface 
        FuncInter2 fobj = message ->System.out.println("Hello "
                                                 + message); 
        fobj.sayMessage("Geek"); 
    } 
}

输出:

Addition is 9
Multiplication is 18
Hello Geek

要点:

void

http://www.niftyadmin.cn/n/1227436.html

相关文章

unity打包后运行出错_一种Shader变体收集和打包编译优化的思路

这是侑虎科技第646篇文章&#xff0c;感谢作者卢建供稿。欢迎转发分享&#xff0c;未经作者授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们&#xff0c;一起探讨。(QQ群&#xff1a;793972859)作者主页&#xff1a;https://github.com/lujian101&#xff0c;作者…

Python3.8 + flask + difflib 实现简单文件比对http接口

背景 最近有个小需求&#xff0c;需要比对两个文件&#xff0c;并展示两个文件的不同之处。 过程 1 文件比对 文件比对尝试了小文件按行取hash\md5&#xff0c;大文件分块等方式。 2 展示 展示可利用python原生difflib模块&#xff08;具体详情可参考官方文档&#xff0…

微服务和SOA有什么区别?读完你就懂了!

微服务是新的SOA吗&#xff1f;人们还在谈论SOA吗&#xff1f;让我们来研究一下这两个架构之间的区别。 在深入探讨微服务和SOA之间的区别之前&#xff0c;让我先告诉您单片体系结构、SOA和微服务之间的基本区别&#xff1a; 用外行的话说&#xff0c;一个整体类似于一个 大容…

厉害了!阿里大牛教你使用Spring搭建微服务框架系列一

一个使用Spring,Spring Boot 和Spring Cloud设置微服务系统的简单示例。 微服务允许从许多协作组件构建大型系统。它在流程级别执行Spring在组件级别执行的操作&#xff1a;松散耦合的流程而不是松散耦合的组件。 例如&#xff0c;设想一个在线商店&#xff0c;为用户帐户、产…

hadoop-3.2.2镜像下载链接

原码下载链接 压缩包下载链接

厉害了!阿里大牛教你使用Spring搭建微服务框架系列二

封装微服务访问 以下是我的客户端应用程序的 WebAccountService 的一部分&#xff1a; Service public class WebAccountsService {Autowired // NO LONGER auto-created by Spring Cloud (see below)LoadBalanced // Explicitly request the load-balanced templ…

厉害了!清华大牛告诉你,微服务架构是什么?

什么是微服务&#xff1f; 微服务是一种面向服务的体系结构模式&#xff0c;其中应用程序被构建为各种最小的独立服务单元的集合。它是一种软件工程方法&#xff0c;侧重于将应用程序分解为具有良好定义接口的单个功能模块。这些模块可以由拥有整个服务生命周期的小型团队独立…

linux安装python3.5_Linux安装python-3.5.2

安装依赖的库yum -y install python-devel openssl openssl-devel gcc sqlite sqlite-devel mysql-devel libxml2-devel libxslt-develPython 下载python 3.5.2www.python.org解压文件tar -xzf Python-3.5.2.tgz进入目录cd Python-3.5.2编译安装./configure --prefix/usr/local…