美文网首页
Jdk1.8关键字default和Stream流

Jdk1.8关键字default和Stream流

作者: Rain_z | 来源:发表于2020-08-19 11:44 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:Jdk1.8关键字default和Stream流

          本文链接:https://www.haomeiwen.com/subject/beidqktx.html