lambda高效简洁神器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lambda高效简洁神器相关的知识,希望对你有一定的参考价值。
参考技术AJDK8发布已有不少年头,已然是一个经典的版本。它带来的新特性lambda,你真的有发现和使用它吗?
按照传统的java编程习惯,我们要实现一个排序功能就像下面的例子:
List people = Arrays.asList(person1, person2, person3);
Collections.sort(people, new Comparator ()
@Override
public int compare(Person o1, Person o2)
return o1.getAge().compareTo(o2.getAge());
);
Lambda写法:
Collections.sort(people, (p1, p2) -> p1.getAge().compareTo(p2.getAge()));
Lambda加强版写法:
Collections.sort(people, Comparator.comparing(Person::getAge));
简单的一行代码,不再需要编写一堆的变量引用,望文生义,快速了解代码业务逻辑。
有接触过js的朋友“闭包”大概都了解过,lambda其实也是相同的一个概念。lambda是内部的实现原理是匿名函数的实现,可以 理解为简洁的表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表,函数主体,返回类型,可能还有一个可以抛出的异常列表。
java中,引入了一个新的操作符“->”,该操作符在很多资料中,称为箭头操作符,或者lambda操作符;箭头操作符将lambda分成了两个部分:
lambda由于java是强类型语言, 使用Lambda的依据是必须有相应的函数接口 (函数接口,是指内部只有一个抽象方法的接口) JDK8添加了新的注解 @FunctionalInterface 来表明函数接口。
函数式接口(Functional Interface)是Java 8对一类特殊类型的接口的称呼。 这类接口只定义了唯一的抽象方法的接口,并且这类接口使用了 @FunctionalInterface 进行注解。函数式接口可以被隐式转换为 lambda 表达式。在jdk8中,引入了一个新的包 java.util.function , 可以使java 8 函数式编程变得更加简便。这个package中的接口大致分为了以下四类:
Lambda 表达式用于表达函数的主体,但如果已经编写/定义了函数/方法,则可以在使用 lambda 表达式的任何地方直接将它们用作方法引用。我们可以看到 lambda 表达式和方法具有相同的用法,只是第一个是匿名的,而后者是命名的。因此,如果我们已经定义了一个方法,则方法引用允许我们按名称使用该方法来代替匿名 lambda 表达式。
有四种方法引用:
Python 函数进阶-lambda匿名函数和三元运算符
匿名函数
什么是匿名函数
用一句话表达只有返回值的函数就是匿名函数。
匿名函数只用来实现一些简单的函数功能,所以追求代码的简洁和高效。
使用关键字 lambda
定义,所以匿名函数又称之为lambda表达式。
分类
- 无参数的
lambda
表达式
# 普通函数
def func():
return hello motherland
# 调用
res = func()
print(res) # hello motherland
# lambda表达式
func = lambda: hello motherland
# 调用
res = func()
print(res) # hello motherland
- 有参数的
lambda
表达式
# 普通函数
def func(val):
return val
# lambda表达式
func = lambda val: val
- 带有判断条件的
lambda
表达式
def func(val):
if val == 0:
return yes
return no
# lambda表达式
func = lambda val: yes if val == 0 else no
三元运算符
三元运算符一般又称之为三目运算符。它是软件编程中的一种固定格式,是众多编程语言中不可或缺的一种逻辑判断算法,逻辑概念就是一个简单的if条件判断语句,使用这个算法可以调用数据时可以逐级筛选。
语法:条件成立表达式 ? 条件判断式 : 条件反式
众多语言中一般使用…… ? …… : ……
符号作为三元运算符,但是python不是这样,python中使用…… if ……… else ………
作为三元运算符的使用, 这也体现了python比其它的语言的优势,更简单的语法和更高的语句可视化。
语法:lambda [参数] : 真值 if 条件表达式 else 假值
如果条件表达式成立,返回真值,反之返回假值
res = yes if 1 == 1 else no
print(res) # yes
以上是关于lambda高效简洁神器的主要内容,如果未能解决你的问题,请参考以下文章