-
常用函数接口
-
@FunctionalInterface
注解可以检测接口是否是一个函数式接口,是,编译成功,否则编译失败(接口中没有抽象方法或抽象方法的个数多于一个)
-
-
函数式编程
-
lambda
的延迟执行满足条件执行接口,不满足则不执行,这是一种优化
-
JDK提供了大量常用的函数式编程接口和丰富的
lambda
的典型应用场景,它们主要在java.util.function
包中被提供。-
Supplier
:只有一个get()方法,返回一个泛型的数据...(Supplier<String>sup){ return sup.get(); } // 调用 (()->"hahaha");
-
Consumer
:消费一个泛型数据(String name, Consumer<String>con){ con.accept(name); }
-
一个字符串翻转的方法
String reName = new StringBuffer(name).reverse().toString(); System.out.println(reName);
-
默认方法
andThen
con1.andThen(con2).accept(s);
将两个Consumer接口连接在一起,谁写在前面,谁先消费。
-
Predicate
:返回一个布尔值return pre.test(s);
如果
lambda
表达式中只有一个参数的话,()可以省略。补充:<? extends A>表示类型必须是A或者A的子类
<? super A>表示类型必须是A或者A的超类
三个默认方法:
and or negate
-
Function
:转化类型接口,前者称为前置条件,后者称为后置条件。int in = fun.apply(s);
默认方法
andThen
-
-
Stream
流-
两种获取流的方式
Collection.stream()
Stream.of(T...values) // 可变参数,可传数组
-
常用方法
-
forEach
:使用Consumer
接口(延)Stream<String>stream = Stream.of("1", "2"..."10"); stream.forEach(name->System.out.println(name));
-
filter
:使用Predicate
接口(延)Stream<String>stream = Stream.of("1", "2"..."10"); String stream2 = stream.filter(name->name.StartsWith("张")); stream2.forEach(name->System.out.println(name)); // stream流只能使用一次,stream调用了filter之后就关闭了,stream不能再使用forEach。
-
map
:使用Function
接口(延)Stream<String>stream = Stream.of("1", "2", "3", "4"); Stream<Integer>stream2 = stream.map(s->Integer.parseInt(s)); stream2.forEach(i->System.out.println(i));
-
count
:统计个数,返回值为long
(终)Stream<Integer>stream = list.stream(); long count = stream.count(); System.out.println(count);
-
limit
:取用前几个,参数是long
类型,参数小于等于元素个数,返回新流,否则不操作。(延) -
skip
:跳过前几个,参数是long
类型,流的长度大于当前参数返回新的流,否则返回一个长度为0的空流。 -
concat
:Stream
的一个静态方法,可以将两个流合并成一个流。补充:
list2.addAll(list1);// 将list1中的元素全部加入到list2中。
-
-
-
方法引用
-
方法引用符号:"::"
-
当对象和方法已经存在,可以直接引用来优化
lambda
表达式-
通过对象名引用成员方法
Person p = new Person(); printString(p::printUpperCaseString);
-
通过类名引用静态成员方法
int number2 = method(-10, Math::abs);
-
通过
this
引用成员方法marry(this::buyHouse);
-
通过
super
引用成员方法method(super::sayHello);
-
类的构造器引用
printName("张三", Person::new);
-
数组的构造器引用
int[] arr2 = createArray(10, int[]::new);
-
-
-
Java自学整理3——Java8的新特性
最新推荐文章于 2024-05-16 10:23:10 发布