返回顶部
首页 > 资讯 > 后端开发 > Python >Java中Lambda表达式用法介绍
  • 752
分享到

Java中Lambda表达式用法介绍

2024-04-02 19:04:59 752人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

Lambda lambda是一个匿名函数,我们可以把lambda表达式理解为是一段可以传递的代码。 lambda简明的地将代码或方法作为参数传递进去执行。 “函数式

Lambda

lambda是一个匿名函数,我们可以把lambda表达式理解为是一段可以传递的代码。

  • lambda简明的地将代码或方法作为参数传递进去执行。
  • “函数式编程”其核心是把函数作为值。
  • 函数式接口 :只有一个 抽象方法的接口 称之为 函数式接口。函数式接口可以使用@FunctionalInterface进行注解。

lambda表达式拆分为两部分

左侧:lambda 表达式的参数列表

右侧:lambda 表达式中所需要执行的功能,即lambda体

语法格式一:无参数,无返回值


@Test
public void test(){
    // () -> System.out.println("Hello");
    Runnable a = new Runnable(){
     @Override
     public void run(){
        System.out.println("Hello")
    }
    };
    //等同于
    Runnable a1 = () -> System.out.println("Hello");
    a1.run();
}

语法格式二:有一个参数,无返回值(若只有一个参数 小括号可以省略不写)


@Test
public void test(){
    //Consumer被注解@FunctionalInterface的接口(函数式接口) 唯一抽象方法 void accept(T t);
    //左侧参数 -> 右侧执行体
    Consumer<String> con = (x) -> System.out.println(x);
                         // x -> System.out.println(x);
    con.accept("hahah");
}

语法格式三:有两个以上的参数,并且lambda体中有多条语句 (若lambda体中只有一条语句,return 和 大括号都可以省略不写)


@Test
public void test(){
    //Comparator被注解@FunctionalInterface的接口 举例抽象方法 int compare(T o1,T o2);
    Comparator<Integer> com = (x,y) -> {
      System.out.println("hhaha0");
      return (x < y) ? -1 : ((x == y) ? 0 : 1);
    };
    com.compare(1,2);
}

注意:lambda表达式的参数类型可以省略不写,因为JVM编译器可以从上下文推断出数据类型。即“类型推断”如果要在参数里面写数据类型,都要写上。

实例

实例1:


class Employee {
    private String name;
    private int age;
    private double salary;
​
    //省略 get and set and constructor
​
}
interface MyPredicate<T> {
    boolean test(T t);
}
public class Test{
    static List<Employee> list = Arrays.asList(
            new Employee("张三",10,1),
            new Employee("里斯",20,1),
            new Employee("王五",16,1),
            new Employee("二三",30,1)
    );
    public static List<Employee> filterEmployee(List<Employee> list,MyPredicate<Employee> mp){
        List<Employee> emps = new ArrayList<>();
        for (Employee employee : list) {
            if(mp.test(employee)){
                emps.add(employee);
            }
        }
        return emps;
 }
    @org.junit.Test
    public void test1(){
        //需要使用自定义的方法
        List<Employee> list2 = filterEmployee(list,(e) -> e.getAge() >= 15);
        list2.stream().map(Employee::getName).forEach(System.out::println);
    }
    @org.junit.Test
    public void test2(){
        //可以使用stream进行list集合的过滤  不使用自定义接口
        List<Employee> list2 = list.stream().filter((e) -> e.getAge() >= 15).collect(Collectors.toList());
        list2.stream().map(Employee::getName).forEach(System.out::println);
    }
}

实例2:

创建一个MyFun接口使用@FunctionalInterface注解,并创建一个抽象方法Integer getValue(Integer num);在Test类对变量进行某种操作。


@FunctionalInterface
interface MyFun{
    Integer getValue(Integer num);
}
public class Test{
    @org.junit.Test
    public void Test(){
        operation(100,num -> ++num);
    }
    
    public Integer operation(Integer num,MyFun mf){
        return mf.getValue(num);
    }
}

class Employee {
    private String name;
    private int age;
    private double salary;
​
    @Override
    public String toString() {
        return "["+this.name+","+this.getAge()+","+this.getSalary()+"]";
    }
    //省略 getter and setter  and constructor
}
​
public class Test {
    List<Employee> list = Arrays.asList(
            new com.bilibili.lambda.test1.Employee("张三",10,1),
            new com.bilibili.lambda.test1.Employee("里斯",20,1),
            new com.bilibili.lambda.test1.Employee("王五",16,1),
            new Employee("二三",30,1)
    );
    @org.junit.Test
    public void test(){
        Collections.sort(list,(e1,e2) -> {
            if(e1.getAge() == e2.getAge()){
                return e1.getName().compareTo(e2.getName());
            }else{
                //比较年龄大小
                return Integer.compare(e1.getAge(),e2.getAge());
            }
        });
        for (Employee e: list) {
            System.out.println(e);
        }
    }
}

四大核心函数式接口

  • Consumer<T> : 消费性接口 void accept(T t);
  • Supplier<T> : 共给性接口 T get();
  • Function<T,R> : 函数性接口 T代表参数,R代表返回值 R apply(T t);
  • Predicate<T> :断言性接口 boolean test(T t);

 
class Test{
    @org.junit.Test
    publilc void test(){
        happy(10000,(money)->System.out.println("happy消费"+money+"元"));
    }
    public void happy(double money,Consumer<double> con){
        con.accept(money);
    }
}

lambda方法引用

方法引用:若lambda体中的内同有方法已经实现了,我们可以使用“方法引用”

(可以理解为方法引用时lambda的另一种表现形式)

主要有三种语法格式:

  • 对象::实例方法名
  • 类::静态方法名
  • 类::实例方法名

class Test{
    //对象::实例方法名
    @org.junit.Test
    public void test(){
        Consumer<String> con = (x) -> System.out.println(x);
        con.accept("haha");
        Consumer<String> con2 = System.out::println;
        con2.accept("haha");
    }
    //类::静态方法名
    @org.junit.Test
    public void test2(){
        Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
        Comparator<Integer> com2 = Integer::compare;
        com.compare(1,2);
        com2.compare(1,2);
    }
    //类::实例方法名
    @org.junit.Test(){
        BiPredicate<String,String> bp = (x,y) -> x.equals(y);
        bp.test("a","a");
        BiPredicate<String,String> bp2 = String::equals;
    }
}

lambda构造器引用

格式:

CalssName::new


class Test{
    @org.junit.Test
    public void test(){
        Supplier<String> sup = () -> new String();
        //这里的构造器引用取决于 接口方法的参数 的个数。 此处函数式接口 T get(); 为无参抽象方法所以String在实例化时 也是实例化无参的构造方法  其他类也适用
        Supplier<String> sup2 = String::new;
        String str = sup2.get();
    }
}

到此这篇关于Java中Lambda表达式用法介绍的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Java中Lambda表达式用法介绍

本文链接: https://lsjlt.com/news/161303.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中Lambda表达式用法介绍
    Lambda lambda是一个匿名函数,我们可以把lambda表达式理解为是一段可以传递的代码。 lambda简明的地将代码或方法作为参数传递进去执行。 “函数式...
    99+
    2024-04-02
  • C++lambda表达式使用介绍
    目录前言lambda表达式格式一些语法走进底层前言 C++98中的一个例子。 #include <iostream> #include <vector> #i...
    99+
    2024-04-02
  • 关于java中的Lambda表达式的详细介绍
    什么是lambda表达式?lambda表达式是一个可传递的代码块,可以在后面执行一次或多次。推荐java相关视频教程:java学习视频例如:class action implements ActionListener{ @Override...
    99+
    2016-04-10
    java入门 java lambda表达式
  • Kotlin方法与Lambda表达式实践使用介绍
    目录前言一、Kotlin的方法1、方法声明2、方法参数3、方法作用域二、Lambda表达式1、Lambda表达式的特点2、Lambda实践总结前言 经过前面对 Kotlin 的介绍,...
    99+
    2024-04-02
  • Java Lambda 表达式
    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java Lambda 表达式 Java L...
    99+
    2023-09-27
    java python 开发语言
  • Lambda表达式(JAVA)
    注:如果没有学过匿名内部类和接口不推荐往下看。 Lambda表达式的语法: (parameters) -> expression 或 (parameters) ->{ statements; } parameters:表示参数列表;->:可...
    99+
    2023-10-27
    java 开发语言 数据结构 lambda
  • Python中lambda表达式的简要介绍和详细使用方法
    Python中lambda函数的简介与用法详解 在Python中,lambda函数是一种特殊的匿名函数,它可以在需要函数对象的任何地方使用。lambda函数通常用来定义一些简单的函数,它们可以只有一个表达式,并且返回结果。本文将...
    99+
    2024-02-02
    简介 用法详解
  • Java中Lambda表达式用法是什么
    本篇文章为大家展示了Java中Lambda表达式用法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Lambdalambda是一个匿名函数,我们可以把lambda表达式理解为是一段可以传递的代码...
    99+
    2023-06-22
  • java8中的lambda表达式简介
    目录Lambda表达式的语法Lambda表达式作用域方法引用指向静态方法的方法引用指向任意类型实例方法的方法引用指向现有对象的实例方法的方法引用构造方法引用lambda与匿名内部类匿...
    99+
    2024-04-02
  • Java中Lambda表达式怎么用
    这篇文章主要介绍了Java中Lambda表达式怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言Lambda表达式是java 8中包含的重要功能之一。Lambda表...
    99+
    2023-06-15
  • C#中Lambda表达式的用法
    从C#3.0开始,可以使用lambda表达式把实现代码赋予委托。lambda表达式与委托(https://www.jb51.net/article/244051.htm)直接相关。当...
    99+
    2024-04-02
  • Java中Lambda表达式有什么用
    小编给大家分享一下Java中Lambda表达式有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Lambda表达式:1、简介首先Lambda表达式是属于Jav...
    99+
    2023-06-29
  • CSS表达式attr()的用法介绍
    本篇内容主要讲解“CSS表达式attr()的用法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS表达式attr()的用法介绍”吧!CSS表达式 attr...
    99+
    2024-04-02
  • 【javaSE】 Lambda表达式与Lambda表达式的使用
    文章目录 🌳Lambda表达式的背景🚩Lambda表达式的语法🚩函数式接口 🎋Lambda表达式的基本使用🎄...
    99+
    2023-09-15
    开发语言 java Lambda表达式 源码
  • C# 本地函数与 Lambda 表达式详细介绍
    目录1、C# 本地函数与 Lambda 表达式2、Lambda 表达式3、本地函数4、那么,局部函数的目的是什么?1、C# 本地函数与 Lambda 表达式 C# 局部函数通常被视为...
    99+
    2024-04-02
  • Java8深入学习系列(一)lambda表达式介绍
    前言最近在学习java8,所以接下来会给大家介绍一系列的Java8学习内容,那么让我们先从lambda表达式开始。众所周知从java8出现以来lambda是最重要的特性之一,它可以让我们用简洁流畅的代码完成一个功能。 很长一段时间java被...
    99+
    2023-05-31
    java8 lambda表达式 ava
  • C++11 lambda(匿名函数)表达式详细介绍
    目录前言概念及基本用法捕获变量lambda表达式类型声明式的编程风格总结前言 Lambda(匿名函数)表达式是C++11最重要的特性之一,lambda来源于函数式编程的概念,也是现代...
    99+
    2024-04-02
  • java lambda表达式的用法是什么
    Lambda表达式是Java 8中引入的一种新的语法特性,用于简化函数式编程的代码编写。Lambda表达式可以替代匿名内部类的使用,...
    99+
    2023-09-26
    java lambda
  • 关于Java 中的 Lambda 表达式
    这篇文章我们将讨论关于Java 中的 Lambda 表达式,Lambda 表达式是 Java 涉足函数式编程的过程。它接受参数并将其应用于表达式或代码块。以下是语法的基本示例: ...
    99+
    2024-04-02
  • java lambda表达式详解
    一、Lambda初识 我们知道,在Java中,接口是不能实例化的,但是接口对象可以指向它的实现类对象。如果接口连实现对象都没有呢?那还可以使用匿名类的方式,如下: public class JavaTest { public ...
    99+
    2023-09-15
    java servlet jvm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作