Java1.8新特性实战
public class JDK8_features {
private ArrayList<Integer> list;
@Test
public void test(){
/**
* 1.Lambda表达式
*/
list = new ArrayList<Integer>();
list.add(1); list.add(null);
list.add(3); list.add(null);
list.add(4); list.add(null);
list.forEach(System.out::println);
list.forEach(e -> System.out.println("方式二:"+e));
// Java 8之前:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Before Java8, too much code for too little to do");
}
}).start();
//Java 8方式:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
}
/**
* 2.Stream函数式操作流元素集合
*/
@Test
public void testStream(){
list = new ArrayList<Integer>();
list.add(1); list.add(null); list.add(1);
list.add(3); list.add(null); list.add(3);
list.add(4); list.add(null);
System.out.println("求和:"+list
.stream()//转成Stream
.filter(item -> item!=null)//过滤
.distinct()//去重
.mapToInt(n->n*3)//map操作
.skip(2)//跳过前2个元素
.limit(4)//限制取前4个元素
.peek(System.out::println)//流式处理对象函数
.sum());//
}
/**
* 3.接口新增:默认方法与静态方法
* default 接口默认实现方法是为了让集合类默认实现这些函数式处理,而不用修改现有代码
* (List继承于Iterable<T>,接口默认方法不必须实现default forEach方法)
*/
@Test
public void testDefaultInterface(){
//可以直接使用接口名.静态方法来访问接口中的静态方法
JDK8Interface1.staticMethod();
//接口中的默认方法必须通过它的实现类来调用
new JDK8InterfaceImpl1().defaultMethod();
//多实现类,默认方法重名时必须复写
new JDK8InterfaceImpl2().defaultMethod();
}
public class JDK8InterfaceImpl1 implements JDK8Interface1 {
//实现接口后,因为默认方法不是抽象方法,重写/不重写都成!
public void defaultMethod(){
System.out.println("接口中的默认方法");
}
}
public static class JDK8InterfaceImpl2 implements JDK8Interface1,JDK8Interface2 {
//实现接口后,默认方法名相同,必须复写默认方法
public void defaultMethod() {
//接口的
JDK8Interface1.super.defaultMethod();
System.out.println("实现类复写重名默认方法!!!!");
}
/**
* 4.方法引用,与Lambda表达式联合使用
*/
@Test
public void testMethodReference(){
//构造器引用。语法是Class::new,或者更一般的Class< T >::new,要求构造器方法是没有参数;
final Car car = Car.create( Car::new );
//System.out.print("构造器引用:"+car.toString());
final List< Car > cars = Arrays.asList( car );
//静态方法引用。语法是Class::static_method,要求接受一个Class类型的参数;
cars.forEach( Car::collide );
//任意对象的方法引用。它的语法是Class::method。无参,所有元素调用;
cars.forEach( Car::repair );//特定对象的方法引用,它的语法是instance::method。有参,在某个对象上调用方法,将列表元素作为参数传入;
//final Car police = Car.create( Car::new );
cars.forEach( Car::follow );
}
public static class Car {
public static Car create( final Supplier< Car > supplier ) {
return supplier.get();
}
public static void collide( final Car car ) {
System.out.println( "静态方法引用 " + car.toString() );
}
public void repair() {
System.out.println( "任意对象的方法引用 " + this.toString() );
}
public static void follow( final Car car ) {
System.out.println( "特定对象的方法引用 " + car.toString() );
}
}
}
/**
* 8.新增base64加解密API
*/
@Test
public void testBase64(){
final String text = "我要测试加解密!!";
String pas = Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));
System.out.println(pas);
final String decoded = new String(
Base64.getDecoder().decode( pas ), StandardCharsets.UTF_8 );
System.out.println( "解密后="+decoded );
}
/**
* 9.数组并行(parallel)操作
*/
@Test
public void testParallel(){
long[] arr = new long [ 5 ];
//1.给数组随机赋值
Arrays.parallelSetAll( arr,
index -> ThreadLocalRandom.current().nextInt( 1000 ) );
//2.打印出前10个元素
Arrays.stream( arr ).limit( 10 ).forEach(
i -> System.out.print( i + " " ) );
System.out.println();
//3.数组排序
Arrays.parallelSort( arr );
// 4.打印排序后的前10个元素
Arrays.stream( arr ).limit( 10 )
.forEach(i -> System.out.print( i + " " ) );
System.out.println();
}
}
Java1.8新特性实战的更多相关文章
- Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView
Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView 8.0出来很久了,这个新特性已经用了很久了,但是一直没有亲自去试试.这几天新的需求来 ...
- java1.8新特性之stream流式算法
在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下: List& ...
- Stream:java1.8新特性
原 Stream:java1.8新特性 2017年08月01日 18:15:43 kekeair-zhang 阅读数:392 标签: streamjava1-8新特性 更多 个人分类: 日记 版权声明 ...
- JDK9新特性实战:流关闭新姿势
做Java开发的都知道,每个资源的打开都需要对应的关闭操作,不然就会使资源一直占用而造成资源浪费,从而降低系统性能. 关于资源的关闭操作,从JDK7-JDK9有了不少的提升及简化. JDK6 在JDK ...
- java1.8新特性(一)
一直在更新java 版本,原来也没有关注java版本的变化 引入的一些新的api 引起注意的还是 关于一些并发包的使用,那时候才对每个版本的特性 去了解了一下,虽然 不一定都用上了,但是不管学习什 ...
- java1.7新特性:try-with-resources
转载:https://blog.csdn.net/fanxiaobin577328725/article/details/53067163 首先看代码: import org.junit.Test; ...
- JDK9新特性实战:简化流关闭新姿势。
做Java开发的都知道,每个资源的打开都需要对应的关闭操作,不然就会使资源一直占用而造成资源浪费,从而降低系统性能. 关于资源的关闭操作,从JDK7-JDK9有了不少的提升及简化. JDK6 在JDK ...
- Java1.7新特性
1.switch语句支持字符串变量 public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) { String typeOf ...
- Java1.8新特性——接口改动和Lambda表达式
Java1.8新特性——接口改动和Lambda表达式 摘要:本文主要学习了Java1.8的新特性中有关接口和Lambda表达式的部分. 部分内容来自以下博客: https://www.cnblogs. ...
随机推荐
- 深入V8引擎-AST(3)
上篇简单介绍了入口方法的流程以及scanner类相关的部分内容,这一篇主要讲scanner的初始化,即 scanner_.Initialize(); 注意,这不是调用静态方法.实际上Parser实例生 ...
- 【JAVA NIO】java NIO
本文是博主深入学习Netty前的一些铺垫,之前只是使用Netty,用的很粗暴,导包,上网找个DEMO就直接用,对Netty中的组件了解并不深入. 于是再此总结下基础,并对一些核心组件作如下记录: 1. ...
- [乐意黎原创]Centos 7里apache(httpd)自启动
最近,Aerchi在折腾 ECS服务器 (Centos 7),每次重启后都要手动开启apache服务,好繁琐. 仔细研究了下:Apache 的服务第一.启动.终止.重启systemctl start ...
- python爬虫的一个常见简单js反爬
python爬虫的一个常见简单js反爬 我们在写爬虫是遇到最多的应该就是js反爬了,今天分享一个比较常见的js反爬,这个我已经在多个网站上见到过了. 我把js反爬分为参数由js加密生成和js生成coo ...
- 03_javaSE面试题:类初始化和实例初始化
题目 下面代码运行的结果是什么? Father 类 /** * @author kevin * @date 2019/7/8 15:48 */ public class Father { privat ...
- mac-VBox-Centos6.6安装增强功能
1. 更新内核 yum update kernel 2.安装依赖包 yum install kernel-headers yum install kernel-devel yum install gc ...
- leetcode的Hot100系列--序
小白程序猿,练练手,做做题目,分享下经验, 有不对的,还请大家能够指出,多多包涵!谢谢!! 先简单,后复杂,循序渐进,希望能够坚持下来, 大家一起进步~~
- Effective Java - 构造器私有、枚举和单例
目录 饿汉式单例 静态常量 静态代码块 懒汉式单例 尝试加锁 同步代码块 双重检查 静态内部类单例 枚举单例 Singleton 是指仅仅被实例化一次的类.Singleton代表了无状态的对象像是方法 ...
- Codeforces 755C:PolandBall and Forest(并查集)
http://codeforces.com/problemset/problem/755/C 题意:该图是类似于树,给出n个点,接下来p[i]表示在树上离 i 距离最远的 id 是p[i],如果距离相 ...
- 在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件
DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一 ...