四时宝库

程序员的知识宝库

Java中Stream简明使用教程(java中stream用法)

一、前言

都JDK15了,你还在使用java8?那好,你知道jdk8的Strean都有哪些用法吗...

java8,永远滴神,下面我们就简要说一下stream的一些常用方法,跟着我的节奏...冲!

二、再说Stream

2.1、Java8是一个非常成功的版本,尤其是改版本中的Stream搭配Lambda,使得我们更便利的进行集合操。

Stream可以将需要处理的集合元素看做是流操作,是对结合对象功能的一个增强,Stream API借助同时出现的Lambda表达式

可以更为便利地对集合进行:筛选、排序、聚合、分组等操作。

2.2、Stream的几个特性:

① 不存储数据,只是对数据的记性运算

② 不会改变数据源,但是可以产生一个新的集合或其他值

③ 它的工作流程是:获取数据流 -> 进行制定运算 -> 产生新的数据流 -> 支持数据新的数据结果


三、Stream的几种常见用法

3.1、遍历输出

        List<Integer> integerList = Arrays.asList(1,2,3,4,5,6,7,8,9,1,2,4);
        System.out.println("***********************遍历输出****************************");
        // 这里也可以不使用stream,直接使用forEach
        integerList.stream().forEach(System.out :: println);

Java


3.2、获取数量

        System.out.println("***********************获取数量****************************");
        long countRlt = integerList.stream().count();
        System.out.println(countRlt);

Java


3.3、获取最大值或最小值

        System.out.println("***********************获取最大值****************************");
        Integer maxRlt = integerList.stream().max(Integer::compareTo).get();
        System.out.println(maxRlt);

        System.out.println("***********************获取最小值****************************");
        Integer minRlt = integerList.stream().min(Integer::compareTo).get();
        System.out.println(minRlt);

Java


3.4、条件检测或筛选

        System.out.println("***********************任意条件检测****************************");
        System.out.println(integerList.stream().anyMatch(item -> item > 7));

        System.out.println("***********************全部条件检测****************************");
        boolean allMatchRlt = integerList.stream().allMatch(item -> item % 2 == 0);
        System.out.println(allMatchRlt ? "集合中全部都是偶数" : "集合中并不全是偶数");

        System.out.println("***********************条件遍历输出****************************");
        integerList.stream().filter(item -> item > 5).forEach(System.out :: println);

        System.out.println("***********************条件输出第一个值****************************");
        Integer rltFir = integerList.stream().filter(item -> item > 6).findFirst().get();
        System.out.println(rltFir);

        System.out.println("***********************条件输出任意值****************************");
        Integer rltAny = integerList.parallelStream().filter(item -> item > 6).findAny().get();
        System.out.println(rltAny);
    System.out.println("***********************条件筛选并放入新容器中****************************");
        List<Integer> integerListFilter = integerList.stream().filter(item -> item >= 6).collect(Collectors.toList());
        integerListFilter.forEach(System.out :: println);

Java


3.5、去重

        System.out.println("***********************去除重复值并输出****************************");
        Stream<Integer> integerStream = integerList.stream().distinct();
        integerStream.forEach(System.out :: println);

Java


3.6、截取

        System.out.println("***********************返回固定长度****************************");
        integerList.stream().limit(3).forEach(System.out :: println);

        System.out.println("***********************去掉指定长度的元素****************************");
        integerList.stream().skip(3).forEach(System.out :: println);

Java


3.7、规约

        System.out.println("***********************规约****************************");
        System.out.println("集合中所有元素之和为:" + integerList.stream().reduce(0, (a, b) -> a + b ));
        System.out.println("集合中所有元素之和为:" + integerList.stream().reduce(0, Integer::sum));
        System.out.println("集合中最大的数为:" + integerList.stream().reduce(0, Integer :: max));

Java


3.8、映射

        System.out.println("***********************map映射****************************");
        List<StreamHandleEntity> streamHandleEntityList = new ArrayList<>();
        for(int i=0;i<10;i++){
            StreamHandleEntity streamHandleEntityTmp = new StreamHandleEntity();
            streamHandleEntityTmp.setName("name" + i);
            streamHandleEntityTmp.setPassword("password" + i);
            streamHandleEntityTmp.setAge(i * 10);
            streamHandleEntityTmp.setSex(i%2 == 0 ? "man" : "women");
            streamHandleEntityList.add(streamHandleEntityTmp);
        }
        streamHandleEntityList.stream().map(StreamHandleEntity::getName).collect(Collectors.toList()).forEach(System.out :: println);

        System.out.println("***********************map映射,多参数****************************");
        streamHandleEntityList.stream().map(item ->{
            StreamHandleDTO streamHandleDTO = new StreamHandleDTO();
            streamHandleDTO.setName(item.getName());
            streamHandleDTO.setSex(item.getSex());
            return streamHandleDTO;
        }).collect(Collectors.toList()).forEach(System.out :: println);

Java


3.9、分组

        System.out.println("***********************分组****************************");
        Map<String, List<StreamHandleEntity>> groupRlt = streamHandleEntityList.stream().collect(Collectors.groupingBy(StreamHandleEntity::getSex));
        System.out.println(groupRlt);
        List<StreamHandleEntity> manDatas = groupRlt.get("man");
        System.out.println(manDatas);

Java


3.10、结合

        System.out.println("***********************结合****************************");
        String names = streamHandleEntityList.stream().map(StreamHandleEntity::getName).collect(Collectors.joining(" -- "));
        System.out.println(names);

Java


3.11、排序

        System.out.println("***********************排序****************************");
        integerList.stream().sorted().forEach(System.out :: println);
     System.out.println("***********************指定排序****************************");
        // 指定项正序
        List<StreamHandleEntity> sortRlt = streamHandleEntityList.stream().sorted(Comparator.comparing(StreamHandleEntity::getAge)).collect(Collectors.toList());
        System.out.println(sortRlt);
     // 指定项倒序
        List<StreamHandleEntity> sortReverseRlt = streamHandleEntityList.stream().sorted(Comparator.comparing(StreamHandleEntity::getAge).reversed()).collect(Collectors.toList());
        System.out.println(sortReverseRlt);

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接