Java8 stream流

一、案例分享

在集合中添加一些数据,过滤出开头为李的名称并且只要长度为2的数据。

public class Stream {
    public static void main(String[] args) {
        // 创建集合,添加数据
        List<String> list = new ArrayList<>();
        list.add("李社会");
        list.add("阿迪达斯");
        list.add("耐克");
        list.add("冠军");
        list.add("彪马");
        list.add("安踏");
        list.add("李宁");
        // 过滤出开头为“李”并且长度为2的数据!
        // Stream流
        list.stream().filter(s -> s.startsWith("李"))
                .filter(s -> s.length() == 2)
                .forEach(s -> System.out.println(s));
    }
}

Java8 stream流_第1张图片

二、Stream流中的三类方法

创建Stream:通过集合、数组、I/O管道等源数据创建一个Stream对象。

中间操作:使用中间操作对Stream对象进行过滤、映射、排序、限制等操作。中间操作可以根据需要进行链式调用。

终止操作: 使用终止操作执行Stream流并产生最终结果。终止操作会触发实际的计算。

1)创建Stream流的方法

  1. Collection集合 —> 使用默认方法stream()生成流 default Stream stream()

    List list = new ArrayList();
    list.stream();
    
    Set set = new HashSet();
    set.stream();
    
  2. Map集合 —> 把Map转成Set集合,间接的生成流

    Map map = new HashMap();
    map.keySet().stream();
    
  3. 数组 —> 通过Arrays中的静态方法stream生成流

    int[] arr = {1,2,3,4,5,6}
    Arrays.stream(arr);
    
  4. 同种类型的多个值 —> 通过Stream接口的静态方法of(T… values)生成流

    Stream<Integer> integerStream = Stream.of(1,2,3,4)
    

2)Stream流中间操作方法

Stream filter(Predicate predicate) 用于对流中的数据进行过滤
Stream limit(long maxSize) 返回此流中的元素组成的流,截取前指定参数个数的数据
stream skip(long n) 跳过指定参数个数的数据,返回由该流的剩余元素组成的流
static Stream concat(Stream a,stream b) 合并a和b两个流为一个流
stream distinct() 返回由该流的不同元素(根据Object.equals(Object) )

limit&skip代码演示

public class Stream {
        public static void main(String[] args) {
            //创建集合,添加数据
            List<String> list = new ArrayList<>();
            list.add("李社会");
            list.add("阿迪达斯");
            list.add("耐克");
            list.add("冠军");
            list.add("彪马");
            list.add("安踏");
            list.add("李宁");
            //需求1:取前3个数据在控制台输出
            list.stream().limit(3).forEach(s -> System.out.println(s));
            System.out.println("--------");
            //需求2:跳过3个元素,把剩下的元素在控制台输出
            list.stream().skip(3).forEach(s -> System.out.println(s));
            System.out.println("--------");
            //需求3:跳过2个元素,把剩下的元素中前2个在控制台输出
            list.stream().skip(2).limit(2).forEach(s -> System.out.println(s));
        }
}

结果:

李社会
阿迪达斯
耐克
--------
冠军
彪马
安踏
李宁
--------
耐克
冠军

concat&distinct代码演示

public class StreamDemo {
    public static void main(String[] args) {

        //创建集合,添加数据
        List<String> list = new ArrayList<>();
        list.add("李社会");
        list.add("阿迪达斯");
        list.add("耐克");
        list.add("冠军");
        list.add("彪马");
        list.add("安踏");
        list.add("李宁");
        //需求1:取前2个数据组成一个流
        Stream<String> s1 = list.stream().limit(2);
        //需求2:跳过3个数据组成一个流
        Stream<String> s2 = list.stream().skip(3);
        //需求3:合并需求1和需求2得到的流,并把结果在控制台输出

        Stream.concat(s1, s2).forEach(s-> System.out.println(s));

    }
}

结果:

李社会
阿迪达斯
冠军
彪马
安踏
李宁

这里我们添加了两条“李宁,彪马”,进行去重之后,只剩一条!

public class StreamDemo {
    public static void main(String[] args) {

        //创建集合,添加数据
        List<String> list = new ArrayList<>();
        list.add("李社会");
        list.add("阿迪达斯");
        list.add("耐克");
        list.add("冠军");
        list.add("彪马");
        list.add("安踏");
        list.add("李宁");
        list.add("李宁");
        list.add("彪马");
        //需求:给集合里面的数据去重
        list.stream().distinct().forEach(s -> System.out.println(s));
    }
}

结果:

李社会
阿迪达斯
耐克
冠军
彪马
安踏
李宁

3)Stream流终结操作方法

void forEach(Consumer action) 对此流的每个元素执行操作
long count() 返回此流中的元素数

forEach()方法上面演示过,所以测试一下count();

public class StreamDemo {
    public static void main(String[] args) {

        // 创建集合,添加数据
        List<String> list = new ArrayList<>();
        list.add("李社会");
        list.add("阿迪达斯");
        list.add("耐克");
        list.add("冠军");
        list.add("彪马");
        list.add("安踏");
        list.add("李宁");
        list.add("李宁");
        list.add("彪马");
        //需求:求出集合里面的元素个数
        long count = list.stream().count();
        System.out.println(count);

    }
}

结果:

9

参考链接:

  1. Stream流式处理详解(通俗易懂)

  2. 一文带你玩转 Java8 Stream 流,从此操作集合 So Easy

你可能感兴趣的:(java,算法,数据结构)