lambda高效简洁神器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lambda高效简洁神器相关的知识,希望对你有一定的参考价值。

参考技术A

JDK8发布已有不少年头,已然是一个经典的版本。它带来的新特性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表达式。


分类

  1. 无参数的​​lambda​​ 表达式
# 普通函数
def func():
return hello motherland

# 调用
res = func()
print(res) # hello motherland


# lambda表达式
func = lambda: hello motherland

# 调用
res = func()
print(res) # hello motherland
  1. 有参数的​​lambda​​ 表达式
# 普通函数
def func(val):
return val


# lambda表达式
func = lambda val: val
  1. 带有判断条件的​​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高效简洁神器的主要内容,如果未能解决你的问题,请参考以下文章

玩转 Java8 Stream,让你代码更高效紧凑简洁

「无代码」高效的爬取网页数据神器

程序员高效开发工具神器汇总

高效 告别996,开启java高效编程之门 2-8实战:判断逻辑参数化-Lambda表达式

Understand:高效代码静态分析神器详解(转)

Android 高效调试神器 JRebel