java8常用新特性
问题背景
java 8的相关新特性,比如 lambda表达式 、函数式接口、方法引用、 Stream API等
对于日常开发来说提供了很多遍历性,现对常用的几个加以梳理总结,抛转引玉。
一、Lambda表达式
Lambda表达式:特殊的匿名内部类,语法更简洁。
Lambda引入了新的操作符:->(箭头操作符),->将表达式分成两部分:
左侧:(参数1,参数2…)表示参数列表。
右侧:{}内部是方法体
语法格式一:
lambda 无参,无返回值
“`
// 线程 //匿名实现类对象—以前的写法
// Runnable runnable=new Runnable() {
// @Override
// public void run() {
// System.out.println(“hello world!”);
// }
// };
//lambda表达式写法
Runnable runnable1= ()->System.out.println(“hello world!”);
“`
语法格式二:
lambda 有一个参,无返回值
“`
// 原来的写法
Consumer<String> con = new Consumer<String>() {
@Override
public void accept(String s){
System.out.println(s);
}
};
con.accept(“hello world!”);
System.out.println(“*********************”);
//Lambda表达式
Consumer<String> con1 = (String str)-> System.out.println(str);
con1.accept(“hello world”);
“`
二、函数式接口
如果一个接口只有一个抽象方法,则该接口称之为函数式接口,函数式接口可以使用Lambda表达式,Lambda表达式会被匹配到这个抽象方法上。
“`
// 原来的写法
USB usb = new USB() {
@Override
public void show() {
System.out.println(“我是函数式接口”);
}
};
// 使用Lambda表达式
USB usb1=()-> System.out.println(“你好”);
info(()-> System.out.println(“你好嘿嘿嘿”));
…
public static void info(USB usb){
usb.show();
}
//函数式接口
interface USB{
public void show();
}
“`
三、方法引用
方法引用式Lambda表达式的一种简写形式。如果Lambda表达式方法体中只是调用一个特定的已经存在的方法,则可以使用方法引用。
构造器 引用举例:
“`
//普通写法
Supplier<Emp> supplier=new Supplier<Emp>() {
@Override
public Emp get() {
return new Emp(“刘德华”);
}
};
//类名::new 方法引用
Supplier<Emp> supplier=Emp::new; //必须该类中存在无参构造函数。
System.out.println(supplier.get());
“`
四、Stream API
流(Stream)中保存对集合或数组数据的操作。和集合类似,但集合中保存的是数据。
特点:
Stream自己不会存储元素。
Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。
Stream操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
中间操作:
filter、limit、skip、distinct、sorted
map
parallel
举例:
personList.stream().filter((person) -> person.getAge()>21).forEach(System.out::println);
System.out.println(“———————-“);
总结
以上是对java 8的几个常用的特性进行的简单的梳理,抛转引玉,各位有空可以深入了解下。