简单好用的stream流

目录

一、Stream简介

二、获取流

三、中间操作

四、终端操作

流对象转换   


一、Stream简介

Stream是Java8中的新特性,java8 中的 stream 与IO流完全不同。

是对数据进行遍历的高级迭代器(遍历数据的同时还能操作数据)

将集合、数组中的数据,放在流对象中,进行操作,操作完后返回需要的数据类型。

Stream不存储数据

集合(数组)--->Stream--->中间操作(过滤、去重、排序等...)--->Stream--->中间操作(过滤、去重、排序等...)--->终端操作(拿到所需数据)

1.获取流  将原始集合或数组对象转换为Stream流对象

2.中间操作()对Stream流对象中的元素进行一系列的过滤、查找等中间操作,返回的仍然为流对象

3.终端操作() 对Stream流进行遍历、统计、收集等终结操作,获取想要的结果。

支持链式操作

查找A2  省去了遍历集合

    ArrayList<Car_Demo3> arrayList=new ArrayList();
        Car_Demo3 c1=new Car_Demo3(1,"A1");
        Car_Demo3 c2=new Car_Demo3(2,"A2");
        Car_Demo3 c3=new Car_Demo3(3,"A3");
        Car_Demo3 c4=new Car_Demo3(4,"A4");
        arrayList.add(c1);
        arrayList.add(c2);
        arrayList.add(c3);
        arrayList.add(c4);

      List<Car> cars= arrayList.stream() //将集合数据放到流中
                .filter((c)->{   //lambda表达式
                    return c.name.equals("A2");
                })// 流中提供的过滤功能,处理完成,返回的还是流
                .sorted()//对流进行排序
                .collect(Collectors.toList());//将流转为集合

二、获取流

使用 Collection 接口下的 stream()

 List<String> list = new ArrayList<>(); 
 Stream<String> stream = list.stream(); 

使用 Arrays 中的 stream() 方法,将数组转成流

 Integer[] nums = new Integer[10]; 
 ​
 Stream<Integer> stream = Arrays.stream(nums); 

使用 Stream 中的静态方法:of()

 Stream<Integer> stream = Stream.of(1,2,3,4,5,6);

使用 BufferedReader.lines() 方法,将每行内容转成流

 BufferedReader reader=new BufferedReader(new FileReader("stream.txt")); 
 ​
 Stream<String> lineStream = reader.lines();

         ArrayList list=new ArrayList();
             list.stream();//把集合的元素放到流中去
 ​
         int []nums={4,5,6,8,2,1,4,6,4,7,5,2,1};
         Arrays.stream(nums);//将数组元素放入   返回流对象
 ​
        Stream.of(5,1,2,4,1,2,4,1);//将数组元素放入   返回流对象

三、中间操作

filter:过滤流中的某些元素,

sorted(): 自然排序,流中元素需实现 Comparable 接口

distinct: 去除重复元素

limit(n): 获取 n 个元素

skip(n): 跳过 n 元素,配合 limit(n)可实现分页

Stream.of(5,1,2,4,1,2,4,1)
                .distinct()//去重
                .sorted()
    			.skip(0)//跳过0个元素
    			.limit(3)//限制三个  第一页 显示三个
    
    			.skip(3)//跳过3个元素
    			.limit(3)//限制三个  第二页 显示三个
    
                .forEach((e)->{
                    System.out.println(e);
                });

limit(n): 限制只获取n个元素

map(): 将其映射成一个新的元素

Stream.of(5,1,2,4,1,2,4,1)
                .distinct()//去重
                .sorted((o1,o2)->{  //    Stream<T> sorted(Comparator<? super T> comparator);
                    return o2-o1;  //倒叙
                })
                .forEach((e)->{
                    System.out.println(e);
                }); //void forEach(Consumer<? super T> action);

四、终端操作

forEach: 遍历流中的元素

toArray:将流中的元素倒入一个数组

Min:返回流中元素最小值

Max:返回流中元素最大值

count:返回流中元素的总个数

Reduce:所有元素求和

anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返

回 true,否则返回 false

allMatch:接收一个 Predicate 函数,当流中每个元素都符合条件时才返

回 true,否则返回 false

findFirst:返回流中第一个元素

collect:将流中的元素倒入一个集合,Collection 或 Map

        Integer max1=Stream.of(5,1,2,4,1,2,4,1)
                .max((o1,o2)->{
                    return  o1-o2;
                })//处理完后封装到 Optional中
                .get();

        System.out.println(max1);
 
  Long coun=Stream.of(5,1,2,4,1,2,4,1)
                .distinct()
                .count();//  元素个数
        System.out.println(coun);
      Integer sum=Stream.of(5,1,2,4,1,2,4,1)
                .reduce((a,b)->{
                    return  a+b;
                })//求和
                .get();
        System.out.println(sum);
  boolean res=Stream.of(5,1,2,4,1,2,4,1)
                .anyMatch((e)->{
                    return e<4;
                    /*
                    只要流中有一个元素满足条件则返
                       回 true,否则返回 false
                     */
                });
        System.out.println(res);

流对象转换   

List list=Stream.of(5,1,2,4,1,2,4,1)
                .distinct()
                .collect(Collectors.toList());
        System.out.println(list);

list转 map

 ArrayList<Car_Demo3> arrayList=new ArrayList();
        Car_Demo3 c1=new Car_Demo3(1,"A1");
        Car_Demo3 c2=new Car_Demo3(2,"A2");
        Car_Demo3 c3=new Car_Demo3(3,"A3");
        Car_Demo3 c4=new Car_Demo3(4,"A4");
        arrayList.add(c1);
        arrayList.add(c2);
        arrayList.add(c3);
        arrayList.add(c4);

        Map<Integer,String> map=arrayList.stream()
        .collect(Collectors.toMap(Car_Demo3::getNum,Car_Demo3::getName));
        System.out.println(map);

取出一列
 

 List<Integer> list1=arrayList.stream()
                .map(Car_Demo3::getNum)
                .collect(Collectors.toList());
        System.out.println(list1);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值