2021-03-31:java第29天: stream流处理ArrayList,或者array; 方法引用的规则

Stream 流

1. 使用传统的方式对集合里的元素进行过滤

String name;

name.startsWith(" ")  

题目;首先筛选姓张的人,其次筛选名字有3个字的人,最后对结果进行打印输出

用stream流的方式对案例进行优化:JDK 1.8之后才有,关注的是做什么,而不是怎么做。Lambda的衍生物

冗杂的代码:

简化后的代码:

package Part3.Day_29;

import java.util.ArrayList;
import java.util.List;

public class demo01list {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");

        list.stream()
                .filter(name->name.startsWith("张"))
                .filter(name->name.length()==3)
                .forEach(name-> System.out.println(name));
    }
}

2.流式思想概述

Stream流的特点,只能使用一次:

package Part3.Day_29;

import java.util.stream.Stream;

public class demo03stream_filter {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("张三丰","张翠山","赵敏","周芷若","张无忌");
        Stream<String> stream1 = stream.filter((String name)->{return name.startsWith("张");});
        stream1.forEach(name-> System.out.println(name));

        /*
        Stream属于管道流,只能被使用一次
        第一个流调用完毕方法把数据转移到第二个流上之后第一个流关闭
        所以第一个流此时就不能调用方法了
         */
        
    }
}

Stream流中的常用方法

filter 方法  过滤不满足要求的,在流中留下满足要求的

map方法  将一种类型映射为一种类型  有点像Function类里的唯一的抽象方法apply, 把一种类型转为(映射)为另一种

package Part3.Day_29;

import java.util.stream.Stream;

public class demo04streammap {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("1", "2", "3", "4");
        //使用map方法把字符串类型的整数映射为Integer类型的整数
        Stream<Integer> stream2 = stream.map((String s)->Integer.parseInt(s));
        stream2.forEach(i-> System.out.println(i));
    }
}

count 方法  统计流中有多少个元素。返回元素为long (此为终结方法,调用此方法后不能再调用流的其他方法)

limit方法 可以对流进行截取,只截取前几个元素,返回的是一个新的流。所以可以继续调用stream流中的其他方法

package Part3.Day_29;

import java.util.stream.Stream;

public class demo06limit {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("1","2","3","4");
        Stream<String> limit = stream.limit(2);
        limit.forEach(name-> System.out.println(name));
    }
}

 

skip方法  跳过前几个元素,返回一个截取之后的新流

 

concat方法  (静态方法) 可以通过接口名字直接调用

3.练习 集合元素处理

4.方法引用

(1)通过对象名调用成员方法

(2)通过类名引用静态成员方法

(3)通过super可引用父类的成员方法

(4)通过this引用本类的成员方法

 

5.类的构造器(构造方法)的引用

6. 数组的构造器引用

 

 

 

 

 


版权声明:本文为qq_41179957原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。