[原创]Jdk8新特性之lamda表达式_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4260 | 回复: 0   主题: [原创]Jdk8新特性之lamda表达式        下一篇 
shun.zhang
注册用户
等级:上士
经验:305
发帖:14
精华:0
注册:1970-1-1
状态:离线
发送短消息息给shun.zhang 加好友    发送短消息息给shun.zhang 发消息
发表于: IP:您无权察看 2014-7-10 14:39:44 | [全部帖] [楼主帖] 楼主

weblogic的时候,发现不同的jdk版本对程序的应用有很大的关系。而jdk8添加的新特性中最显著的就是λ表达式,这倒是比C#慢了一步。

λ表达式的主要目的是加大代码的重构。先看一下,目标代码的结构图(图看不了的话,就当没有吧),免得来回翻动麻烦。

北京联动北方科技有限公司

北京联动北方科技有限公司

首先将官方的例子在开发环境中跑跑一会儿。例子的源程序这里就直接免了,需要的话,可以到官方的例子中去下载。

首先,lamda表达式的长相很奇怪。它用“->”表示。其次,它的表达体可以是一个语句块{...},也可以是一个可以计算结果的表达式。在lamda表达式中对象的使用让人感觉很突兀和很奇怪。因为lamda表达式中使用的对象不需要提前在程序中定义和声明,他只是在使用的时候将目标对象转成它需要的对象。例如:

方法的使用:

processPersons(
roster,
p -> p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25,
p -> p.printPerson()
);
在使用的时候p->...在前面既没有定义也没有声明,突然出现的,似乎是从天而降,不着边际。其实,在程序编译的时候默认的将你的p转变成Predicate<T> ,Consumer<T>中的泛型的数据类型。
publicstaticvoidprocessPersonsWithFunction(
List<Person> roster,
Predicate<Person> tester,
Function<Person, String> mapper,
Consumer<String> block) {
      for (Person p : roster) {
            if (tester.test(p)) {
                  String data = mapper.apply(p);
                  block.accept(data);
            }
      }
}


Lamda表达式的执行时机是,当程序调用 PredicateConsumerFunction对象的一些方法时被执行。这一点,可以通过程序跟踪测试,也可以通过eclipse的调试工具测试。

Lamda表达式中一些陌生的数据类型的常用方法:

Predicate test(),估计给定的lamda表达式是不是符合预测。给我的感觉是这就像是java的测试工具中的断言。

Function apply(),调用“->”右边的表达式的内容,一般是一个对象的方法。

Consumer accept(),检测给定的参数类型,并将其放到程序块中执行。

以上的数据类型都是用于存放lamda表达式的数据类型,而后面的方法则是lamda表达式执行的地方。

注意:在lamda表达式中最好不要进行对原有的对象的数据类型的改变,其中的数据改变可能达不到你的预期效果。Lamda表达式的主要意图是将一段代码(lamda表达式体)当成一个参数来传递行为,而不仅仅只是值,方便代码重构,也增加代码的可读性。可以理解为做了一点预处理。在我的运行的代码中,Lamda表达式修改引用的值不能达到预期的效果,但是也不是像多线程不同同步的时候,出现的结果是不可预测的一样。这个留着吧。再者,很多以前用匿名对象情况,改用lamda表达式一般都会方便一些,特别是只实现了一个接口的匿名对象。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论