在Java代码中写Lambdac语言正则表达式代码是种怎样的体验

java8之如何使用lambda表达式
java8之如何使用lambda表达式
Java8和Java9计划完成 20 到 30 篇文章,这是第二篇。如果您对编程感兴趣,欢迎订阅我的头条号,也欢迎关注我的个人独立IT博客:谈谈IT,网址就是哦。在Java8之lambda表达式中介绍了lambda表达式的语法,引入了lambda表达式的使用场景,以及使用lambda 表达式的好处。我们将在这篇文章中,以实例讲解如何定义和使用lambda表达式,以及与其它语言相比,lambda表达式在Java中的特殊规范。使用匿名内部类的例子首先明确一点,在Java8出现之前,lambda表达式能够做到的,使用内部类也能做到,lambda表达式只是简化了编程。下面的例子是从列表中根据条件挑选出读者。定义TantanitReader:定义判断的接口:定义选择函数:编写测试用的例子,分别选择成年读者和十多岁(包括10岁)的读者:执行后,打印结果如下:可以看到,两次选择读者,都需要new Predicate(),并且重写(Override)test方法,而真正的差异其实只在于判断语句:和但是在Java8之前,由于没有lambda表达式,只能忍受这种冗余。如何用lambda表达式来简化代码呢?为了照顾Java开发人员既有的编程习惯,与其它语言不同,Java8在设计lambda表达式的使用机制时,规定仍然需要使用接口,并且要求所使用的接口必须是函数式接口,在这个例子中,我们仍然可以使用因为这个接口只有一个抽象方法(java8引入了default方法,default方法有具体实现,不算抽象方法),所以它是函数式接口(functional interface)。函数式接口可以加上@FunctionalInterface声明,也可以不加。但是加上之后,编译器在编译阶段就会检查这个接口是否符合函数式接口的定义,所以这里我们定义一个新的接口,并且加上@FunctionalInterface声明:并且给SelectService添加一个以PredicateFunction为参数的方法:再修改测试的例子:下面我们分析一下这段代码是如何生效的:这段代码,生成了一个PredicateFunction类型的实例,并且将该实例的引用作为参数传给tantanitReaderSelectSerive的select方法,并且执行select方法。select在执行过程中,调用predicateFunction的test方法,而test方法的内容就是我们传入的lambda表达式,最终按照lambda表达式,选择出读者。再进一步,一般可以不定义predicateFunction这个变量,而直接将lambda表达式作为参数传给tantanitReaderSelectSerive的select方法,像这样:但是这个例子,实际上会报编译错误,说TantanitReader和tantanitReaderSelectSerive的select方法的定义不匹配,因为select方法使用的是泛型。java8的文档确实是规定了在使用泛型的情况下,不能直接将lambda表达式作为参数,这个挺无语的。如果不使用泛型的,没有这个问题。小结下面总结一下如何使用lambda表达式首先,定义一个函数式接口(functional interface),并且在接口中定义需要使用的抽象方法。编写业务方法,并且以该函数式接口作为参数,并且调用该接口定义的方法,完成业务逻辑。调用业务方法,并且将lambda表达式作为参数传入。如果使用了泛型,最后一步改为先定义一个函数式接口的实例的引用,再作为参数传给业务方法。此外,lambda表达式还可以继续简化为函数引用,将在后面的文章中讲解。如果您喜欢这篇文章,可以收藏和分享给更多朋友哦,在此拜谢orz!收藏和分享后,在PC上看IT文章,观感更好。欢迎订阅我的头条号,您也可以直接访问我的独立博客。这篇文章的地址是/java-how-to-use-lambda/
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
百家号 最近更新:
简介: 每天三分钟,带你进入好的技术。
作者最新文章javaSE及jsp(67)
原文链接:&
http://blog.csdn.net/renfufei/article/details/
下载示例程序&&。
原文日期: 日
翻译日期: 日
翻译人员:&
(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个&&,由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。本人建议不要乱用,因为这就和某些很高级的黑客写的代码一样,简洁,难懂,难以调试,维护人员想骂娘.)
Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。
Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包:&java.util.function&包以及java.util.stream&包。
流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。 在本文中,我们将从简单到复杂的示例中见认识lambda表达式和stream的强悍。
如果还没有安装Java 8,那么你应该先安装才能使用lambda和stream(译者建议在虚拟机中安装,测试使用)。
像NetBeans 和IntelliJ IDEA 一类的工具和IDE就支持Java 8特性,包括lambda表达式,可重复的注解,紧凑的概要文件和其他特性。
下面是Java SE 8和NetBeans IDE 8的下载链接:
: 从Oracle下载Java 8,也可以和NetBeans IDE一起下载
从NetBeans官网下载NetBeans IDE
Lambda表达式的语法
(parameters) -& expression
(parameters) -&{ }
下面是Java lambda表达式的简单例子:
基本的Lambda例子
现在,我们已经知道什么是lambda表达式,让我们先从一些基本的例子开始。 在本节中,我们将看到lambda表达式如何影响我们编码的方式。 假设有一个玩家List ,程序员可以使用 for 语句 (&for 循环&)来遍历,在Java SE 8中可以转换为另一种形式:
正如您看到的,lambda表达式可以将我们的代码缩减到一行。 另一个例子是在图形用户界面程序中,匿名类可以使用lambda表达式来代替。 同样,在实现Runnable接口时也可以这样使用:
下面是使用lambdas 来实现 Runnable接口 的示例:
Runnable 的 lambda表达式,使用块格式,将五行代码转换成单行语句。 接下来,在下一节中我们将使用lambdas对集合进行排序。
使用Lambdas排序集合
在Java中,Comparator 类被用来排序集合。 在下面的例子中,我们将根据球员的 name, surname, name 长度 以及最后一个字母。 和前面的示例一样,先使用匿名内部类来排序,然后再使用lambda表达式精简我们的代码。
在第一个例子中,我们将根据name来排序list。 使用旧的方式,代码如下所示:
使用lambdas,可以通过下面的代码实现同样的功能:
其他的排序如下所示。 和上面的示例一样,代码分别通过匿名内部类和一些lambda表达式来实现Comparator :
就是这样,简洁又直观。 在下一节中我们将探索更多lambdas的能力,并将其与 stream 结合起来使用。
使用Lambdas和Streams
Stream是对集合的包装,通常和lambda一起使用。 使用lambdas可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等。 同样,Stream使用懒运算,他们并不会真正地读取所有数据,遇到像getFirst()&这样的方法就会结束链式语法。
在接下来的例子中,我们将探索lambdas和streams 能做什么。 我们创建了一个Person类并使用这个类来添加一些数据到list中,将用于进一步流操作。 Person 只是一个简单的POJO类:
接下来,我们将创建两个list,都用来存放Person对象:
现在我们使用forEach方法来迭代输出上述列表:
我们同样使用forEach方法,增加程序员的工资5%:
另一个有用的方法是过滤器filter() ,让我们显示月薪超过1400美元的PHP程序员:
我们也可以定义过滤器,然后重用它们来执行其他操作:
使用limit方法,可以限制结果集的个数:
排序呢? 我们在stream中能处理吗? 答案是肯定的。 在下面的例子中,我们将根据名字和薪水排序Java程序员,放到一个list中,然后显示列表:
如果我们只对最低和最高的薪水感兴趣,比排序后选择第一个/最后一个 更快的是min和max方法:
上面的例子中我们已经看到 collect 方法是如何工作的。 结合 map 方法,我们可以使用 collect 方法来将我们的结果集放到一个字符串,一个 Set 或一个TreeSet中:
Streams 还可以是并行的(parallel)。 示例如下:
我们可以使用summaryStatistics方法获得stream 中元素的各种汇总数据。 接下来,我们可以访问这些方法,比如getMax, getMin, getSum或getAverage:
OK,就这样,希望你喜欢它!
在本文中,我们学会了使用lambda表达式的不同方式,从基本的示例,到使用lambdas和streams的复杂示例。 此外,我们还学习了如何使用lambda表达式与Comparator 类来对Java集合进行排序。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:574603次
积分:5692
积分:5692
排名:第4654名
原创:54篇
转载:180篇
评论:38条
(6)(16)(3)(2)(5)(21)(6)(3)(6)(33)(1)(24)(24)(1)(1)(1)(1)(28)(2)(1)(6)(1)(1)(2)(16)(1)(1)(1)(1)(4)(5)(5)(1)(1)(1)(2)10个Java 8 Lambda表达式经典示例_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
10个Java 8 Lambda表达式经典示例
&&10个Java 8 Lambda表达式经典示例
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 c语言正则表达式代码 的文章

 

随机推荐