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> |
相关推荐
Java 8 中 Lambda 表达式的基础使用 Java 8 中的 Lambda 表达式是 Java 8 中最流行最常用的功能特性之一。它将函数式编程概念引入 Java,函数式编程的好处在于可以帮助我们节省大量的代码,非常方便易用,能够大...
这个名为 "java8-lambda-samples" 的项目是为了配合一场关于 Java 8 lambda 表达式的闪电演讲而创建的,包含了示例代码,帮助开发者理解和学习这一新特性。 首先,我们需要理解 lambda 表达式的基本概念。Lambda ...
本项目"java8-lambda-expression-demo"就是为了让开发者深入理解并实践这些新特性。 Lambda表达式允许我们以一种更简洁的方式定义匿名函数,即没有名字的函数。这种表达式的形式是`()->{主体代码}`,其中箭头左侧...
前几天公司内部分享的PPT,讲述了 函数式接口、Lambda表达式、Stream、OptionalJDK8的新特性。
java8集合源码java8 lambda 流 rxjava 在 Java 8 版本中,Java 提供了对函数式编程、新的 JavaScript 引擎、用于日期时间操作的新 API、新的流 API 等的支持。 新的功能: Lambda 表达式 向 Java 添加函数处理能力。...
在 `java8-lambda-streams-mooc-master` 这个压缩包中,你将找到课程中的练习和源代码。这些练习可能涵盖了如何创建和使用 Stream、使用 Lambda 表达式实现函数式接口、使用 Stream API 进行数据过滤、映射、分组等...
**PyPI 官网下载 | cdk-lambda-extensions-0.1.232.tar.gz** 这个资源是Python开发者常用的工具,源自Python Package Index(PyPI)官方网站。PyPI是Python社区的一个重要组成部分,它提供了众多开源Python库的存储...
Java 8 的 Lambda 表达式是 Java 编程语言的重大革新,它引入了一种新的函数式编程概念,使得代码更加简洁、可读性更强。Lambda 表达式允许我们将函数作为一个方法参数,或者把函数作为方法返回值,极大地简化了处理...
java8 看不到源码Java8 Lambda - Stream INSTA 开始使用 lambda 和流。 Java 8 新的惊人特性。它的灵感来自于 Java 8 kata。 用法 运行测试 如果愿意,您可以从 IDE 或命令行运行测试。 如果您使用的是 IDE,请右键...
sqs-to-lambda-via-lambda, 向Lambda函数交付SQS队列项( 使用 Lambda ) 到 Lambda ( 通过 Lambda )当前没有用于Lambda的本机SQS事件源。 这种情况很糟糕。你可以运行类似于但是需要运行一个实例,谁想这样做。?运行...
Java 8 的引入,尤其是Lambda表达式,对Java语言产生了深远的影响,它为Java开发者带来了更简洁、更灵活的编程方式。Lambda表达式是函数式编程的核心元素,它允许我们将函数作为方法参数传递,或者将代码块当作数据...
1. **下载**:从官方或者第三方源获取`java-8-openjdk-amd64.tar.gz`压缩包。 2. **解压**:使用`tar`命令解压文件到指定目录。 3. **配置环境变量**:修改`~/.bashrc`或`~/.bash_profile`文件,添加`JAVA_HOME`、`...
1. **Lambda表达式**:Java 8引入了lambda表达式,这是一种简洁的匿名函数表示方式。通过lambda,你可以创建没有名字的函数,常用于需要一个函数对象但无需定义新类的情况。例如,`Function`、`Consumer`、`Supplier...
欧拉公式求长期率的matlab代码Lambda Dojo 受启发 ...确保您具有正确配置的IDE项目(Java8) 读了这本书 寻找解决方案 其他练习可以在软件包中找到: euler_99存在以下问题 进一步的链接 原本的 备忘单
java8流源码Java8-Functional-Interfaces-and-Lambda-Expressions 为什么使用 Lambda 启用函数式编程:我们可以将函数用作可以传递的实体。 可读且简洁的代码:强大的匿名内部类。 Lambda 使其可读且简洁。 更易于...
《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功能的重要开发工具。这个库是...
有用的东西 加入 合并类似于sql joins的集合 SortedListJoiner 合并两个排序的列表(类型为T和U)并生成类型为R的列表,其中通过将组合器应用于T和U的实例来创建项目 fullOuterJoin:包括两个列表的所有元素,缺少...
标题中的"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"项目中,我们有机会深入学习和理解Lambda的基础知识。 Lambda表达式是Java 8对匿名函数的支持,允许我们将函数作为方法参数传递,或者将函数存储在变量中。它们的语法结构简洁,通常由...
Java 8是Java语言的一个重大版本更新,它引入了lambda表达式,这是Java平台的核心特性之一。Lambda表达式为Java带来了函数式编程的元素,使得开发者可以以更简洁的方式编写代码,尤其是在集合和多线程方面。本资料...