Jdk1.8关键字default和Stream流
2020-08-19 本文已影响0人
Rain_z
default
新增了一个default关键字,在接口中,可以实现方法,然后用default修饰,那么在实现类中不需要实现,就可以直接调用这个方法
用处:比如如果在List集合中实现了一个抽象方法,那么对于继承的ArrayList就可以直接使用,无需再实现方法,减少代码量和维护成本
Lombda表达式
Stream流
核心理念:只关注实现,不关注如何实现,如filter只是过滤,forEach只是遍历
- 使用Stream有两种模式:
1.1. 集合对象获取如:list.stream()
1.2. Stream流静态方法, 对象.of
String[] strArray = {"A12","A13"};
List<String> strList = new ArrayList<>(Arrays.asList(strArray));
//strList.stream().forEach(System.out::println);//这种方式可以直接使用流方法代替
strList.forEach(System.out::println);
//循环内部插入逻辑处理
strList.forEach(str -> {
System.out.println("当前元素:" + str);
});
打印结果:
A12
A13
当前元素:A12
当前元素:A13
- Stream流分为两种方法:
2.1. 延迟方法:方法的返回值类型仍然是自身类型,支持链式调用(除了终结方法,都是延迟方法)
2.2. 终结方法:方法的返回值不再是自身类型,不支持链式调用(forEach,count)
2.2.1.Stream常用方法:filter,forEach,map,count,limit,skip,concat
如:forEach方法属于终结方法,遍历之后无法再进行调用
2.2.2. Stream流只能被消费(使用)一次,第一个Stream流调用方法完毕,数据就会转到下一个Stream流中,第一个Stream流就关闭了,如果需要讲一个流转到下一个流中可以使用map方法 - 函数式接口Predicate
jdk1.8新增一个包java.util.functon包,这里面有很多类,用来支持函数式编程,其中一个接口就是predicate,一如定义两个过滤函数,可将其作为参数一样传递,同时predicate提供类似于逻辑操作符AND和OR方法,叫作and(),or(),可以和filter结合使用
Predicate<String> p1 = str -> str.startsWith("A");
Predicate<String> p2 = str -> str.length() == 2;
Stream.of("A1","A2","B1","B2","A12","A13").filter(p1.and(p2)).forEach(System.out::println);
打印结果:
A1
A2