`

Java8-Lambda

 
阅读更多

Lambda表达式可以理解为表示可传递的匿名函数的一种方式,可以简明地传递代码,例如排序:

//java8前的旧方式

public void sortByOld() {

   Comparator<Apple> byWeight = new Comparator<Apple>() {

       @Override

       public int compare(Apple o1, Apple o2) {

           return o1.getWeight().compareTo(o2.getWeight());

       }

   };

 

}

//java8新方式

public void sortByLambda() {

       Comparator<Apple> byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

 

}

//lambda表达式语法

(param)->expression或者(param)->{statements;}

 

 //函数式接口:只有一个抽象方法的接口,这个抽象方法叫函数描述符

 //定义函数式接口的语法

@FunctionalInterface

public interface Predicate<T> {

 

    boolean test(T t);

}

 

//Java API内置的函数式接口

Comparable、Runnable、Callable、Predicate、Comsumer、Function

java.util.function.Predicate<T>:接收T类型对象并返回boolean

java.util.function.Comsumer<T>:需要访问类型T的对象,并对其执行某些操作

java.util.function.Function<T>:将输入对象的信息映射到输出中

 

//Java装箱和拆箱机制,装箱后会需要更多的内存,如何避免自动装箱

//常用的函数式接口

函数式接口 函数描述符 原始类型特化
Predicate<T> T->boolean IntPredicate,LongPredicate,DoublePredicate
Comsumer<T> T->void IntComsumer,LongComsumer,DoubleComsumer
Function<T,R> T->R IntFunction<R>,IntToDoubleFunction,IntToLongFunction,LongFunction<R>,LongToDoubleFunction,LongToIntFunction,DoubleFunction<R>,ToIntFunction<T>,ToDoubleFunction<T>,ToLongFunction<T>
 Supplier<T> ()->T  BooleanSupplier , IntSupplier, LongSupplier, DoubleSupplier
 UnaryOperator<T> T->T  IntUnaryOperator , LongUnaryOperator, DoubleUnaryOperator
 BiPredicate<L,R> (L,R)->boolean   
 BiConsumer<T,U> (T,U)->void   
 BiFunction<T,U,R> (T,U)->R   
 BinaryOperator<T> (T,T)->T  IntBinaryOperator ,LongBinaryOperator,DoubleBinaryOperator

 

//练习

T->R:  Funtion<T,R>

(int,int)->int:IntBinaryOperator.applyAsInt

T->void:Comsumer<T>.accept 

()->T:Supplier<T>.get

(T,U)->R:BiFunction<T,U,R>.apply

//Lambda及函数式接口的例子

使用案例 Lambda的例子 对应的函数式接口
布尔表达式 (List<String>list)->list.isEmpty() Predicate<List<String>>
创建对象 ()->new Apple(10) Supplier<Apple>
消费一个对象 (Apple a)->System.out.println(a.getWeight()) Comsumer<Apple>
从一个对象中选择或提取 (String s)->s.length() Function<String,Integer>或ToIntFunction<String>
合并两个值 (int a,int b)->a*b IntBinaryOperator
比较两个对象 (Apple a,Apple b)->a.getWeight().compareTo(b.getWeight()) Comparator<Apple>或BiFunction<Apple,Apple,Integer>

 

分享到:
评论

相关推荐

    java8-lambda表达式的基础使用.pdf

    Java 8 中 Lambda 表达式的基础使用 Java 8 中的 Lambda 表达式是 Java 8 中最流行最常用的功能特性之一。它将函数式编程概念引入 Java,函数式编程的好处在于可以帮助我们节省大量的代码,非常方便易用,能够大...

    java8看不到源码-java8-lambda-samples:伴随我关于Java8lambda表达式的闪电演讲的代码

    这个名为 "java8-lambda-samples" 的项目是为了配合一场关于 Java 8 lambda 表达式的闪电演讲而创建的,包含了示例代码,帮助开发者理解和学习这一新特性。 首先,我们需要理解 lambda 表达式的基本概念。Lambda ...

    java8-lambda-expression-demo:演示lambda在Java 8中的用法

    本项目"java8-lambda-expression-demo"就是为了让开发者深入理解并实践这些新特性。 Lambda表达式允许我们以一种更简洁的方式定义匿名函数,即没有名字的函数。这种表达式的形式是`()-&gt;{主体代码}`,其中箭头左侧...

    Java8-遇见Lambda.pptx

    前几天公司内部分享的PPT,讲述了 函数式接口、Lambda表达式、Stream、OptionalJDK8的新特性。

    java8集合源码-poc-java8-lambda-stream-rxjava:poc-java8-lambda-stream-rxjava

    java8集合源码java8 lambda 流 rxjava 在 Java 8 版本中,Java 提供了对函数式编程、新的 JavaScript 引擎、用于日期时间操作的新 API、新的流 API 等的支持。 新的功能: Lambda 表达式 向 Java 添加函数处理能力。...

    javastream源码-java8-lambda-streams-mooc:OracleJava8LambdaStreamsMooc的练习和

    在 `java8-lambda-streams-mooc-master` 这个压缩包中,你将找到课程中的练习和源代码。这些练习可能涵盖了如何创建和使用 Stream、使用 Lambda 表达式实现函数式接口、使用 Stream API 进行数据过滤、映射、分组等...

    PyPI 官网下载 | cdk-lambda-extensions-0.1.232.tar.gz

    **PyPI 官网下载 | cdk-lambda-extensions-0.1.232.tar.gz** 这个资源是Python开发者常用的工具,源自Python Package Index(PyPI)官方网站。PyPI是Python社区的一个重要组成部分,它提供了众多开源Python库的存储...

    JAVA 8 Lambda表达式-Lambda Expressions.rar

    Java 8 的 Lambda 表达式是 Java 编程语言的重大革新,它引入了一种新的函数式编程概念,使得代码更加简洁、可读性更强。Lambda 表达式允许我们将函数作为一个方法参数,或者把函数作为方法返回值,极大地简化了处理...

    java8看不到源码-java8-lambda-stream-insta:Insta会话java8

    java8 看不到源码Java8 Lambda - Stream INSTA 开始使用 lambda 和流。 Java 8 新的惊人特性。它的灵感来自于 Java 8 kata。 用法 运行测试 如果愿意,您可以从 IDE 或命令行运行测试。 如果您使用的是 IDE,请右键...

    sqs-to-lambda-via-lambda, 向Lambda函数交付SQS队列项( 使用 Lambda ).zip

    sqs-to-lambda-via-lambda, 向Lambda函数交付SQS队列项( 使用 Lambda ) 到 Lambda ( 通过 Lambda )当前没有用于Lambda的本机SQS事件源。 这种情况很糟糕。你可以运行类似于但是需要运行一个实例,谁想这样做。?运行...

    Java 8 lambda表达式

    Java 8 的引入,尤其是Lambda表达式,对Java语言产生了深远的影响,它为Java开发者带来了更简洁、更灵活的编程方式。Lambda表达式是函数式编程的核心元素,它允许我们将函数作为方法参数传递,或者将代码块当作数据...

    java-8-openjdk-amd64

    1. **下载**:从官方或者第三方源获取`java-8-openjdk-amd64.tar.gz`压缩包。 2. **解压**:使用`tar`命令解压文件到指定目录。 3. **配置环境变量**:修改`~/.bashrc`或`~/.bash_profile`文件,添加`JAVA_HOME`、`...

    OnJava8-Examples-3.0_soucecode_java_

    1. **Lambda表达式**:Java 8引入了lambda表达式,这是一种简洁的匿名函数表示方式。通过lambda,你可以创建没有名字的函数,常用于需要一个函数对象但无需定义新类的情况。例如,`Function`、`Consumer`、`Supplier...

    欧拉公式求圆周率的matlab代码-java8-lambda-dojo:Katas和Quizzies受Java8Lambdas启发,Richa

    欧拉公式求长期率的matlab代码Lambda Dojo 受启发 ...确保您具有正确配置的IDE项目(Java8) 读了这本书 寻找解决方案 其他练习可以在软件包中找到: euler_99存在以下问题 进一步的链接 原本的 备忘单

    java8stream源码-Java8-Functional-Interfaces-and-Lambda-Expressions:Java8-

    java8流源码Java8-Functional-Interfaces-and-Lambda-Expressions 为什么使用 Lambda 启用函数式编程:我们可以将函数用作可以传递的实体。 可读且简洁的代码:强大的匿名内部类。 Lambda 使其可读且简洁。 更易于...

    Python库 | aws-cdk.aws-lambda-python-1.138.2.tar.gz

    《Python库aws-cdk.aws-lambda-python-1.138.2:构建AWS Lambda函数的强大工具》 在IT行业中,Python库aws-cdk.aws-lambda-python-1.138.2是一个针对AWS(Amazon Web Services)Lambda功能的重要开发工具。这个库是...

    java8-lambda-utils

    有用的东西 加入 合并类似于sql joins的集合 SortedListJoiner 合并两个排序的列表(类型为T和U)并生成类型为R的列表,其中通过将组合器应用于T和U的实例来创建项目 fullOuterJoin:包括两个列表的所有元素,缺少...

    PyPI 官网下载 | aws-cdk.aws-lambda-destinations-1.87.1.tar.gz

    标题中的"PyPI 官网下载 | aws-cdk.aws-lambda-destinations-1.87.1.tar.gz"指的是Python Package Index (PyPI)上发布的开源软件包,该包是针对AWS Cloud Development Kit (CDK)的一个组件,具体是`aws-lambda-...

    Java-8-Lambda-Basics:Java 8 Lambda基础课程的源代码。 https-java source code

    在这个"Java-8-Lambda-Basics"项目中,我们有机会深入学习和理解Lambda的基础知识。 Lambda表达式是Java 8对匿名函数的支持,允许我们将函数作为方法参数传递,或者将函数存储在变量中。它们的语法结构简洁,通常由...

    java 8 lambda- expressions 学习资料,例子。练习 java example

    Java 8是Java语言的一个重大版本更新,它引入了lambda表达式,这是Java平台的核心特性之一。Lambda表达式为Java带来了函数式编程的元素,使得开发者可以以更简洁的方式编写代码,尤其是在集合和多线程方面。本资料...

Global site tag (gtag.js) - Google Analytics