前言
9月份出来java9,才想起来自己java8都没用过,赶紧爬爬代码熟悉下java8,不然又落伍了。
java8引入lambda表达式,简化开发;引入流的并行化操作,提升性能。为了接口向后兼容,interface中新增default方法;interface中可加入static方法。
jdk8新特性一览
Lambda
lambda编程时一种函数式编程,函数式编程的核心:在思考问题时,使用不可变值和函数,函数对一个值进行处理,印射成另外一个值。
lambda表达式特征
- 函数接口(只有一个抽象方法)
- 表达式静态类型
- 类型推断
- 引用值(final),而不是变量
常用的函数接口
接口(用途) | 参数 | 返回类型 |
---|---|---|
Predicate<T > (断言) | T | boolean |
Consumer<T> (消费) | T | void |
Function<T,R> (函数) | T | R |
Supplier<T> (工厂方法) |
None | T |
UnaryOperator<T> (逻辑非) | T | T |
BinaryOperator<T> (二元操作) | (T,T) | T |
代码实例
package zl;
import java.util.function.BiFunction;
import java.util.function.BinaryOperator;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
/**
* 常用函数式接口
*
*/
public class FuntionDemo {
/**
* @param args
*/
public static void main(String[] args) {
/**判断大于0*/
Predicate<Integer> predicate = i -> i>0;
boolean test = predicate.test(1);
System.out.println(test);//true
/**打印字符串*/
Consumer<String> consumer =System.out::print;
consumer.accept("hello\r\n");//打印hello
/**字符串转int*/
Function<String, Integer> function = Integer::valueOf;
Integer apply = function.apply("1");
System.out.println(apply);//1
/**返回空字符串*/ //简化版function,没有输入参数
Supplier<String> supplier = String::new;
String string = supplier.get();
System.out.println(string.length());//0
/**返回相反值*/ //简化版function(一元操作符),输入参数与输入参数为同一类型