添加的新特性:
##jdk 8 lambda 匿名函数 一、只保留参数列表->引用方法体 作用:去掉匿名内部类 ##方法引用:: 本质是lambda表达式的简写。 ##集合内部循环 ##Stream API ##集合泛型的自动推断一、lambda匿名函数
package com.example;
import java.util.ArrayList;
import java.util.List;
public class MyClass {
public static void main(String[] args) {
System.out.println("jdk8...");
//jdk8之前
testThread();
//jdk 8之后
testThreadLambda();
//lambda 方法引用::
testMethodLambda();
//lambda 集合内部循环
testListForEach();
}
private static void testListForEach() {
List<Persion> list = new ArrayList<>();
//jdk 5.0之前
for (int i = 0; i < 5; i++) {
Persion p = new Persion("persion" + i, i);
list.add(p);
}
//jdk 5.0之后
for (Persion item : list) {
item.setAge(18);
}
for (Persion item : list) {
System.out.println(item);
}
System.out.println("-----------------------------------");
//jdk 8 lambda 内部循环
list.forEach(item -> item.setAge(20));
list.forEach(item -> System.out.println(item));
System.out.println("-----------------------------------");
list.forEach(item -> item.setAge(30));
list.forEach(System.out::println);
}
private static void testMethodLambda() {
//lambda 调用static方法 Object::method
new Thread(Md5Utils::getStaticFilds).start();
//lambda 调用filds obj::method
Md5Utils utils = new Md5Utils();
new Thread(utils::getFilds).start();
}
private static void testThreadLambda() {
//只保留参数列表->引用方法体
new Thread(() -> System.out.println("current thread name:subThread jdk 8")
).start();
}
private static void testThread() {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("current thread name:subThread");
}
}).start();
}
}
二、Stream API
package com.example;
import java.util.Arrays;
import java.util.List;
/**
* Created by zqh on 2017/9/3.
*/
public class StreamApi {
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(1, 1, null, null, 5, 6, 7, 8, 9, 10,2,3,4);
int sum = nums.stream()
.filter(item -> item != null)//filter:操作符过滤作用(输入满足的条件)
.distinct()//distinct:操作符:去重
.mapToInt(item -> item * 2)//mapToInt:操作符:对集合中的每一个元素进行整形运算
.skip(2)//skip操作符:跳过两个元素
.limit(4)//limit操作符:返回指定元素个数
.sum();//sum:属于聚合函数,同时也是结束函数(此时才进行循环)
nums.forEach(System.out::println);
System.out.println("sum: " + sum);
}
}
三、Android Studio Android 项目 使用JDK8 需要的条件: 需要添加retroLambda插件
1、安装部署jdk8开发环境。
2、在project 的build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'me.tatarka:gradle-retrolambda:3.7.0'//3.0
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
3、在android module 的build.gradle
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
--------------------------------------------
//设置当前的jdk编译版本 8
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}