Java 8笔记
1、Lambda表达式
1.1、什么叫Lambda表达式:
Lambda表达式就是一段带有参数的可执行语句块
1.2、Lambda表达式在java语言中引入了一个新的语法元素和操作符;
这个操作符为“->”,该操作符被称为Lambda或箭头操作符;它将Lambda
Fenwick两个部分:
左侧:指定了Lambda表达式需要的所有参数
右侧:指定了Lambda体,即Lambda所需要执行的功能
1.3、Lambda表达式的语法:
1.3.1、语法格式一:无参、无返回值,Lambda只需要一条语句
Runnable r1=() ->System.out.println(“hello word”);
1.3.2、语法格式二:带一个参数
Consumer<String> fun=(args) ->System.out.println(args);
1.3.3、语法格式三:Lambda只需要一个参数时,参数的小括号可以省略
Consumer<String> fun=args ->System.out.println(args);
1.3.4、语法格式四:Lambda只需要一个参数时,并且有返回值
BinaryOperator<Long> bo=(x,y) ->{
System.out.println(“实现函数式接口方法”);
return x+y;
};
1.3.5、语法格式五:当Lambda体只有一条语句是,大括号和return可以省略
BinaryOperator<Long> bo=(x,y) ->x+y
1.3.6、语法格式六:
BinaryOperator<Long> bo=(Long x,Long y) ->{
System.out.println(“实现函数式接口方法”);
return x+y;
};
//Lambda体参数类型可以省略,因为可有编译器推断的出来,称为类型推断
简单的举个例子:
*下面代码是老版本的Java中是如何排列字符串的:
List<String> names=Arrays.asList(“peter”,”anna”,”mike”,”xenia”);
Collections.sort(names,new Comparator<String>);
@Override
Public int compare(String a,String b){
Return b.compareTo(a);
}
//只需要给静态方法Collecyions.sort传入一个List对象以及一个比较起来按指 定顺序排列。通常做法都是创建一个匿名的比较器对象然后将其传递给sort 方法
*在java8中就没必要使用这种传统的匿名对象的方式,java8提供了更简洁的 语法,lambda表达式:
Collections sort(names,(a,b) ->b.compare(a))
2、函数式接口
2.1、什么是函数式接口:
2.1.1、只包含一个抽象方法的接口,称为“函数式接口”;
2.1.2、你可以通过Lambda表达式来创建该接口的对象,(若Lambda表达式抛出一 个受检查时异常,那么该异常需要在目标接口的抽象方法上进行声明)
2.1.3、可以在任意函数式上使用@FunctionalInterface注解,该注解可以检查它是否 是一个函数式接口,
2.2、java8中常用的全新接口
2.2.1、Predicate接口(断言型接口)
Predicate接口只有一个参数,返回boolean类型,该接口包含多种默认方法 来将Predicate组合成其他复杂的逻辑(比如:与,或,非),包含方法boolean test(T t):
代码如下:
Predicate<String> predicate=(s) ->s.length()>0;
Predicate.test(“foo”);//true
Predicate.negate().test(“foo”);//false
2.2.2、Function<T,R>接口(函数型接口):T代表参数,R代表返回值
Function接口有一个参数并且返回一个结果,并附带了一些可以和其他函 数组合的默认方法(compose,andThen),包含方法 R apply (T t);
代码如下:
Function<String,Integer> tolnteger=integer::valueOf;
Function<String,String> backToString=tointeger.andThen(String::valueOf);
backToString.apply(“123”);//123
2.2.3、Supplier接口(供给型