Jdk1.8关键字default和Stream流

2020-08-19  本文已影响0人  Rain_z

default

新增了一个default关键字,在接口中,可以实现方法,然后用default修饰,那么在实现类中不需要实现,就可以直接调用这个方法
用处:比如如果在List集合中实现了一个抽象方法,那么对于继承的ArrayList就可以直接使用,无需再实现方法,减少代码量和维护成本

Lombda表达式

Stream流

核心理念:只关注实现,不关注如何实现,如filter只是过滤,forEach只是遍历

  1. 使用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
  1. 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方法
  2. 函数式接口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
上一篇下一篇

猜你喜欢

热点阅读