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();
}

}

最新文章

  1. cnblogs技术知识共享
  2. SQL Server 深入解析索引存储(上)
  3. mysql编译时报的一个警告warning: type-punning to incomplete type might break strict-aliasing rules,可能是bug
  4. SecureCRT清屏
  5. StringEx
  6. 剑指offer--面试题7
  7. 手机通过WIFI连上ZXV10 H618B路由器但不能上网问题的解决
  8. android学习日记04--开发中的通用细节
  9. java中关于移位运算符的demo与总结
  10. 移动开发框架,第【一】弹:QuoJs 官方文档(汉化版)
  11. 1 Linux平台下快速搭建FTP服务器 win7下如何建立ftp服务器
  12. keil中查看内存数据
  13. MVC定义路由
  14. 沃森Mysql数据库修复工具
  15. python Django学生管理
  16. Python:黑板课爬虫闯关第二关
  17. Linux sar工具安装使用
  18. template-web.js 引用变量、函数
  19. struts配置result类型为json后导致页面不能访问的错误
  20. 转:JMeter压力测试及并发量计算

热门文章

  1. HDFS Java API 的基本使用
  2. Hive学习之路(一)—— Hive 简介及核心概念
  3. 中转Webshell 绕过安全狗(一)
  4. SSM集合
  5. js常用设计模式实现(一)单例模式
  6. redis 发布和订阅实现
  7. Jpa 笔记
  8. Django中使用JS通过DataTable实现表格前端分页,每页显示页数,搜索等功能
  9. .NET Core 3.0之深入源码理解Kestrel的集成与应用(二)
  10. 【Spring容器】项目启动后初始化数据的两种实践方案