Stream流

1.什么是Stream流

Java8的两个重大改变,一个是lambda表达式另一个就是stream api表达式。Stream是Java8中处理集合的关键抽象感念,它可以对集合进行非常复杂的查找,过滤,筛选等操作。

2.为什么使用Stream流

当我们需要对集合中的元素进行操作的时候,除了必需的添加,删除,获取外,最经典的就是集合遍历。我们来体验集合操作数据的弊端,需求如下:

public class Test {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"刘陌","吴铭","王芯妍","姜娇娇","张文莉");
//        拿到所有姓张的
        ArrayList<String> zhangList=new ArrayList<>();
        for (String name:list){
            if (name.startsWith("张")){
                zhangList.add(name);
            }
        }
//        拿到名字==3
        ArrayList<String> nameLength=new ArrayList<>();
        for (String name:zhangList){
            if (name.length()==3){
                nameLength.add(name);
            }
        }
//       打印这些数据
        for (String namd:nameLength){
            System.out.println(namd);
        }
    }
}

分析:

优化:性能比传统的快,支持多线程

public class Test02 {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"张陌雅","吴铭","王芯妍","姜娇娇","张文莉");
/*      filter:过滤
*       startsWith:字符串截取
*       forEach:循环*/

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

    }
}

3.Stream流的原理

4.如何获取Stream流对象

通过Collecton对象的Stream()或parallelStream()方法

通过Arrays类的Stream()方法

通过Stream接口的of(),iterate(),generate()方法

通过IntStream,LongStream,DoubleStream接口中的of,range,rangeClosed方法

获取并行流

5.Stream流中常见的API

中间操作api:一个操作的中间链,对数据源进行操作,而这种操作的返回类型还是一个Stream对象

 中间操作:

        过滤:filter();

public class Test04 {
    public static void main(String[] args) {
        List<person> list=new ArrayList<>();
        list.add(new person("刘陌",23,"韩国",'M'));
        list.add(new person("吴铭",26,"韩国",'M'));
        list.add(new person("张文莉",23,"中国",'F'));
        list.add(new person("王芯妍",21,"中国",'F'));
        list.add(new person("迪丽热巴",23,"中国",'F'));
//        1.找出年龄>18:filter():过滤器需要断言接口,返回true获取该元素,foreach()
//        无论执行多少个中间操作,如果没有执行终止操作,那么中间操作都不会被执行
        list.stream()
                .filter(itme->itme.getAge()>18)
                .forEach(System.out::println);
//        2.找出所有中国人的数量:filter():过滤其他国家的人  count():终止操作
        long count = list.stream()
                .filter(itme -> itme.getCountry().equals("中国")).count();
        System.out.println(count);

  }
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class person{
    private String name;
    private int age;
    private String country;
    private char sex;
}

        集合:map();

        排序:sorted();

终止操作api:一个终止操作,执行中间操作链,并生产结果,返回类型不在是Stream流对象

 终止操作:

        循环:forEach();

        统计:count();

        最大:max();

        最小:min();

        规约:reduce()--参数和返回类型一致,可以实现对集合求和,求乘积和求最值;

        收集:collect();

        查询:find();

        条件满足:match()

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值