java8的常用的新特征
一、Java 8 对接口做了进一步的增强。(默认方法和静态方法)
a. 在接口中可以添加使用 default 关键字修饰的非抽象方法。即:默认方法(或扩展方法不用被实现)如:comparator接口。Iterable接口中的forEach默认方法。
b. 接口里可以声明静态方法,并且可以实现。如:comparator接口。Collections.sort(), max(), min() 等方法;
Java8内部类访问外部变量不需要加final修饰。
二、Java8新增list.forEach遍历(Lambda表达表达式,代替匿名内部类)
遍历方式:
1
2
3
4
5
6
|
list.forEach( new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); |
1
2
3
4
5
|
Lambda表达式: list.forEach(s ->{ System.out.println(s); } ); |
<wiz_tmp_tag class="wiz-block-scroll">
函数作为参数传递进方法中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
TestJava8 tester = new TestJava8(); // 类型声明 MathOperation addition = ( int a, int b) -> a + b; // 不用类型声明 MathOperation subtraction = (a, b) -> a - b; // 大括号中的返回语句 MathOperation multiplication = ( int a, int b) -> { return a * b; }; // 没有大括号及返回语句 MathOperation division = ( int a, int b) -> a / b; System.out.println( "10 + 5 = " + tester.operate( 10 , 5 , addition)); System.out.println( "10 - 5 = " + tester.operate( 10 , 5 , subtraction)); System.out.println( "10 x 5 = " + tester.operate( 10 , 5 , multiplication)); System.out.println( "10 / 5 = " + tester.operate( 10 , 5 , division)); } interface MathOperation { int operation( int a, int b); } private int operate( int a, int b, MathOperation mathOperation){ //接口作为方法的参数,传对应的实现类,lambd表达式代替了匿名类 return mathOperation.operation(a, b); } |
三、可以使用重复注解
1
2
3
4
|
@Filter ( "filter1" ) @Filter ( "filter2" ) public interface Filterable { } |
四、新的Date/Time ApI
LocalDate,LocalTime,Clock类;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
final Clock clock = Clock.systemUTC(); System.out.println( clock.instant() ); System.out.println( clock.millis()); // Get the local date and local time final LocalDate date = LocalDate.now(); final LocalDate dateFromClock = LocalDate.now( clock ); System.out.println( date ); System.out.println( dateFromClock ); // Get the local date and local time final LocalTime time = LocalTime.now(); final LocalTime timeFromClock = LocalTime.now( clock ); System.out.println( time ); System.out.println( timeFromClock ); |
五、函数式接口
1、函数式接口(Functional Interface)是只包含一个方法的抽象接口;
2、函数式接口是为Java 8中的lambda而设计的,lambda表达式的方法体其实就是函数接口的实现。
3、@FunctionalInterface注解不是必须的,只要接口只包含一个抽象方法,虚拟机会自动判断该接口为函数式接口,加上后避免添加新方法。
六、方法引用
1、方法引用是lambda表达式的一种简写;
1
2
3
4
5
6
7
|
对象::实例方法 类::静态方法 类::实例方法 类:: new Arrays.sort(strings, String::compareToIgnoreCase); // 等价于 Arrays.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2)); |
java8的常用的新特征的更多相关文章
- java8中常用的新功能
Lambda表达式的用法,并行流.Optional.循环.线程池等
- ios新特征 ARC详解
IOS ARC 分类: IOS ARC2013-01-17 09:16 2069人阅读 评论(0) 收藏 举报 目录(?)[+] 关闭工程的ARC(Automatic Reference Co ...
- Java线程新特征——Java并发库
一.线程池 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定 ...
- Java多线程-新特征-阻塞队列ArrayBlockingQueue
阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素 ...
- 利用GBDT模型构造新特征具体方法
利用GBDT模型构造新特征具体方法 数据挖掘入门与实战 公众号: datadw 实际问题中,可直接用于机器学**模型的特征往往并不多.能否从"混乱"的原始log中挖掘到有用的 ...
- Java线程:新特征-线程池
Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定可靠的多线程程序 ...
- Java线程:新特征-有返回值的线程
http://lavasoft.blog.51cto.com/62575/222082/ Java线程:新特征-有返回值的线程 2009-11-04 17:33:56 标签:返回值 职场 线程 休闲 ...
- (转)Java线程:新特征-原子量,障碍器
Java线程:新特征-原子量 所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的. 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题.在Java5之前 ...
- (转)Java线程:新特征-条件变量
Java线程:新特征-条件变量 条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量.但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往 ...
随机推荐
- 发布npm包
来源:https://segmentfault.com/a/1190000010398983
- php 笔记 汇总 学习
php命令行:通过命令行进入到当前要被执行的php文件路径,然后输入php环境可执行路径(后面包含php.exe),然后输入要被执行的php文件,比如runData.php即可. php框架:yaf. ...
- js上传文件研究
https://github.com/shengulong/javascript-file-upload
- OHIFViewer meteor build 问题
D:\Viewers-master\OHIFViewer>meteor build --directory d:/h2zViewerC:\Users\h2z\AppData\Local\.met ...
- 查询公司外网ip方法
curl -s "http://checkip.dyndns.org/"|cut -f 6 -d" "|cut -f 1 -d"<" ...
- socket 网络编程高速入门(一)教你编写基于UDP/TCP的服务(client)通信
由于UNIX和Win的socket大同小异,为了方便和大众化,这里先介绍Winsock编程. socket 网络编程的难点在入门的时候就是对基本函数的了解和使用,由于这些函数的结构往往比較复杂,參数大 ...
- 键值对集合Dictionary<K,V>根据索引提取数据
Dictionary<K,V>中ToList方法返回 List<KeyValuePair<K,V>>定义可设置检索的键/值对
- Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor
Webservice WCF WebApi 注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下, ...
- sublime 高速打开跳转至关联文件
在下一枚web前端,近期在用sublime text2编辑器写前端.因为页面较多,项目较大,所以难免出现非常多引用文件和一些js的teample模板. 问题:在Sublime Text编写代码过程中要 ...
- HDU 1085 Holding Bin-Laden Captive!(母函数,或者找规律)
Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...