Stream学习笔记

Easter79
• 阅读 766

1. 创建Stream实例的五种方式

  @Test
    public void test1(){
        // 创建Stream对象的第一种方式
        List<String> list = Lists.newArrayList("A", "B", "C");
        Stream<String> stream1 = list.stream();

        // 创建Stream对象的第二种方式
        String[] arr = {"A", "B"};
        Stream<String> stream2 = Arrays.stream(arr);

        // 创建Stream对象的第三种方式

        Stream<String> stream3 = Stream.of("A", "B");

        // 创建Stream对象的第四种方式
        // iterate会无限执行,所以limit只取前5个
        Stream<Integer> stream4 = Stream.iterate(0, x -> x * x).limit(5);

        // 创建Stream对象的第五种方式
        // generate也会无限执行,所以limit只取前5个
        Stream<Double> stream5 = Stream.generate(Math::random).limit(5);
    }

2. Stream常用Api

 @Test
    public void test2() {
        List<String> list = Lists.newArrayList("abc", "bcd", "efg", "a12", "bcd");
        // 1.过滤
        list.stream().filter(x -> x.contains("b")).forEach(System.out::println);

        // 2.取前n
        list.stream().limit(1).forEach(System.out::println);

        //3. 跳过前n个
        list.stream().skip(2).forEach(System.out::println);

        //4. distinct 去重
        list.stream().distinct().forEach(System.out::println);

        //5. map映射
        list.stream().map(x -> x.toUpperCase()).forEach(System.out::println);

        System.out.println("-----------------------");
        //6. flatMap映射(与scala中的map,flatMap一样的),返回的是个Stream
        list.stream().flatMap(x -> Stream.of(x.toUpperCase())).forEach(System.out::println);


        //7.排序  sorted() ---> 自然排序
        List<Integer> list1 = Lists.newArrayList(12, 1, 0, -1, 2, 56, 34);
        list1.stream().sorted().forEach(System.out::println);

        //8.排序 sorted(Comparator com)  --> 按指定规则排序
        list1.stream().sorted((e1, e2) -> -Integer.compare(e1, e2)).forEach(System.out::println);

        //9. 匹配与查找
        // list中的所有元素都含有"a"
        boolean ret = list.stream().allMatch(x -> x.contains("a"));
        System.out.println(ret);

        // list只要有一个元素包含有"a",就true
        ret = list.stream().anyMatch(x -> x.contains("a"));
        System.out.println(ret);

        //list中没有以"A"开头的元素
        ret = list.stream().noneMatch(x -> x.startsWith("A"));
        System.out.println(ret);

        //第一个元素
        Optional<String> first = list.stream().findFirst();
        System.out.println(first.get());

        //找任意一个元素
        Optional<String> any = list.parallelStream().findAny();
        System.out.println(any.get());

        // 找最大值
        Optional<Integer> max = list1.stream().max(Integer::compareTo);
        // 上面这行代码是下面代码的简写
//        Optional<Integer> max1 = list1.stream().max((e1, e2) -> Integer.compare(e1, e2));
        System.out.println(max.get());

        //10 , 归约
        Optional<Integer> reduce = list1.stream().reduce((x, y) -> x + y);  // list1中元素求和
        System.out.println(reduce.get());

        Integer sum = list1.stream().reduce(0, Integer::sum);  // list1中元素求和
        System.out.println(sum);

        Integer sum2 = list1.stream().reduce(10, Integer::sum);  // 10 + list1中元素求和
        System.out.println(sum2);

        //11. collect--> 将stream转成list集合
        List<Integer> collect = list1.stream().map(x -> x * 2).collect(Collectors.toList());
        collect.forEach(System.out::println);

    }
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
ROS 日志消息(C++)
1.日志级别日志消息分为五个不同的严重级别宏,与Android的Log定义的严重级别类似,如下基础宏:ROS_DEBUG_STREAM、ROS_INFO_STREAM、ROS_WARN_STREAM、ROS_ERROR_STREAM、ROS_FATAL_STREAM(按照严重程序级别排序,低到高)C代码:
Wesley13 Wesley13
3年前
java8新特性
Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str
Wesley13 Wesley13
3年前
java8的list, map简化操作
一:stream用法   Stream类型有两种类型的方法中间操作(IntermediateOperation),结束操作(TerminalOperation)    Stream之所以“懒”的秘密也在于每次在使用Stream时,都会连接多个中间操作,并在最后附上一个结束操作。像map()和filter()这样的方法
Wesley13 Wesley13
3年前
Java Lambda 常用案例
List类的Stream处理:List<StringlistnewArrayList<String();list.add("djk");list.add("djk1");list.add("djk12");//maplistlist.stream().ma
Wesley13 Wesley13
3年前
Java Stream
1Stream简介Stream是数据渠道,用于操作数据源(集合,数组等)所生成得元素序列。而集合讲得是数据,流讲得是计算。注意:Stream自己不会存储元素。Stream不会改变源对象。相反,它会返回一个持有结果得新StreamStream操作时延迟执行得,这意味着它们会等到需要结果时才执
Wesley13 Wesley13
3年前
JDK1.8 之Stream API总结
Stream是Java8新增加的类,用来补充集合类。Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的。Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的数据的访问和有效管理(增删改),而Stream并没有提供访问和管理元素的方式,而是通过声明数据源的方式,利用可计算的操作在数据源上执行,当然
Wesley13 Wesley13
3年前
Java8 Stream分组
//根据排课id分组Map<Integer,List<Schedule4HomeworkidSchedule4HomeworksMapschedule4Homeworks.stream().collect(Collectors.groupingBy(Schedule4Homework::getScheduleId));
Wesley13 Wesley13
3年前
JAVA8流操作
Stream的三个操作步骤:1创建Stream2中间操作3终止操作packageairycode_java8.nice6;importairycode_java8.nice1.Employee;importorg.junit.Test;importjava
Wesley13 Wesley13
3年前
Java 8 – Filter a null value from a Stream
Java8–FilteranullvaluefromaStreampackagecom.mkyong.java8;importjava.util.List;importjava.util.stream.Collectors;importjava.util.stream.Stream;publiccla
使用Flink完成流数据统计 | 京东云技术团队
Flink程序构建的基本单元是stream和transformation(DataSet实质上也是stream)。stream是一个中间结果数据,transformation对数据的加工和操作,该操作以一个或多个stream为输入,计算输出一个或多个stream为结果,最后可以sink来存储数据。
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
6
获赞
1.2k