java8

Java 8 和 Scala 中的 Lambda 表达式

雨燕双飞 提交于 2019-11-27 09:21:27
这篇文章是infoQ上面关于java 8 和 scala 特性比较的一部分,原文实在是太长了,,分段翻译,先贴出来一部分,翻译的不好,欢迎拍砖。。。 原文地址 Java8 终于要支持Lambda表达式!自2009年以来Lambda表达式已经在Lambda项目中被支持。在那时候,Lambda表达式仍被称为Java闭包。在我们进入一些代码示例以前,先来解释下为什么Lambda表达式在Java程序员中广受欢迎。 1、为什么使用Lambda表达式 Lambda表达式通常使用在图形用户界面(GUI)的开发中。一般来说,GUI编程将程序行为和事件做连接。比如,当用户按下一个按钮(触发一个事件),你的程序就需要去执行某些行为,可能是将一些数据储存到一个数据存储器中。在Swing中,可以使用ActionListener来实现: class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent e) { //do something } } class UIBuilder { public UIBuilder() { button.addActionListener(new ButtonHandler()); } } 这个例子表明了 ButtonHandler 类作为一个回调替换的用法

Java 8新特性探究(五)重复注解(repeating annotations)

此生再无相见时 提交于 2019-11-27 09:20:58
知识回顾 前面介绍了: lambda表达式和默认方法 (JEP 126) 批量数据操作(JEP 107) 类型注解(JEP 104) 注:JEP=JDK Enhancement-Proposal (JDK 增强建议 ),每个JEP即一个新特性。 在java 8里面,注解一共有2个改进,一个是类型注解,在上篇已经介绍了,本篇将介绍另外一个注解的改进:重复注解(JEP 120)。 什么是重复注解 允许在同一申明类型(类,属性,或方法)的多次使用同一个注解 一个简单的例子 java 8之前也有重复使用注解的解决方案,但可读性不是很好,比如下面的代码: public @interface Authority { String role(); } public @interface Authorities { Authority[] value(); } public class RepeatAnnotationUseOldVersion { @Authorities({@Authority(role="Admin"),@Authority(role="Manager")}) public void doSomeThing(){ } } 由另一个注解来存储重复注解,在使用时候,用存储注解Authorities来扩展重复注解,我们再来看看java 8里面的做法: @Repeatable

Stream.parallel()学习小计

孤人 提交于 2019-11-27 02:46:48
今天想了解一下parallel的工作原理,于是看了一个网上的demo,用parallel来实现一个1+2+3+..+n-1+n的操作,因为parallel背后是使用的jdk7才引入的ForkJoinPool,而ForkJoinPool默认会启动=处理器个数的线程数,好像会变快是不是? 在我的电脑: 4个i7-6500U处理器,12G内存上跑,一开始使用单线程,从1加到100000000,总花费时间是2193ms public static long sequentialSum(long n){ return Stream.iterate(1l,i->i+1).limit(n).reduce(0l,Long::sum); } public static void main(String[] args) { long start = System.currentTimeMillis(); long l = sequentialSum(100000000); long end=System.currentTimeMillis(); System.out.println(l); System.out.println(end-start); } 接着在Stream中加入parallel(),然后再跑一下,发现电脑直接就卡死了,并且过了5分钟以上都没打印出结果(ps