Stream流的集合操作

  • Post author:
  • Post category:其他


概念:

Stream是JDK1.8的新特性,方便操作集合,简化代码的API。

流程:

1、把集合转为Stream流

2、操作Stream流,(在管道中的中间操作和终止操作)

package com.zyj.demo.stream;

import java.util.*;
import java.util.stream.Collectors;

/**
 *1.创建stream
 *2.中间操作
 *3.终止操作
 */
public class StreamApi {

    public static void main(String[] args) {

        //list添加数据
        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        list.add("黑七");
        list.add("黄八");
        list.add("黄八");
        System.out.println("准备初始集合:" + list);
        //list.stream() 集合转为流
        //collect 收集流的意思,Collectors.toList()将流转为list集合

        /******************************************中间操作符**************************************************/

        //list去重复数据  distinct去掉重复数据
        List<String> collect = list.stream().distinct().collect(Collectors.toList());
        System.out.println("去重后的结果:" + collect);
        //找出包含王的数据  filter过滤条件元素
        List<String> wang = list.stream().filter(str -> str.contains("王")).collect(Collectors.toList());
        System.out.println("过滤后的结果:" + wang);
        //limit取几个元素
        List<String> jie = list.stream().limit(4).collect(Collectors.toList());
        System.out.println("截取后的结果:" + jie);
        //skip取几个元素
        List<String> skips = list.stream().skip(4).collect(Collectors.toList());
        System.out.println("截取后的结果:" + skips);
        //map对流中的元素就行统一处理
        List<String> mapper = list.stream().map(str -> str.concat("***")).collect(Collectors.toList());
        System.out.println("拼接后的结果:"+ mapper);

        /******************************************终止操作符**************************************************/

        //集合中是否有一个元素满足条件
        Boolean anyMatch = list.stream().anyMatch(str -> str.contains("张三"));
        System.out.println("是否有一个元素满足条件:"+anyMatch);
        //集合中所有元素都满足条件
        Boolean allMatch = list.stream().allMatch(str -> str.length()>0);
        System.out.println("集合中所有元素都满足条件:"+allMatch);
        //集合中所有元素都不满足条件
        Boolean noneMatch = list.stream().noneMatch(str -> str.length()>=2);
        System.out.println("所有元素都不满足条件:"+noneMatch);
        //返回集合中任意元素
        Optional<String> anyies = list.stream().findAny();
        System.out.println("返回集合中任意元素串行:"+anyies.get());
        for (int i = 0; i <10 ; i++) {
            Optional<String> any = list.parallelStream().findAny();
            System.out.println("返回集合中任意元素并行:"+any);
        }
        //返回集合中第一个元素
        Optional<String> findFirst = list.stream().findFirst();
        System.out.println("返回集合中第一个元素:"+findFirst.get());
        //循环
        list.stream().forEach(str->System.out.println("循环输出"+str));
        //将流中结果反复计算得到一个结果
        Optional<String> reduce = list.stream().reduce((a, c) -> {
            return a + c;
        });
        System.out.println("累加的结果:"+reduce.get());
        //获取集合中元素的个数
        long count = list.stream().count();
        System.out.println("集合中元素的个数"+count);
    }
}



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