zoukankan      html  css  js  c++  java
  • Java8新特性(1)—— Stream集合运算流入门学习

    废话,写在前面

    • 好久没写博客了,懒了,以后自觉写写博客,每周两三篇吧!
    • 简单记录自己的学习经历,算是对自己的一点小小的督促!
    • Java8的新特性很多,比如流处理在工作中看到很多的地方都在用,是时候扔掉笨重的for循环了!节省40%-50%代码量!Come on!

    如题 (总结要点)

    • Stream API只能被消费一次,后续重复使用已建立的流会报异常!所以stream流是线程安全的!

    • 比如执行“stream.forEach(System.out::println);stream.forEach(System.out::println);”连续两次,

    • 出现java.lang.IllegalStateException: stream has already been operated upon or closed。

    • 原文链接 :

    借鉴学习文章列表

    1.主题

    package com.jdk8.newFeatures;
    
    import org.junit.Test;
    
    import javax.swing.*;
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Random;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    /**
     * 测试Stream 的集合流
     */
    public class StreamTest01 {
        @Test
        public void test(){
           // 1-1准备初始的数据流,通过已有的集合来创建流 无存储。
                 //Stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等
            List<String> strings = new ArrayList<>(Arrays.asList("111","222","333"));
            // 1-2创建Stream
            Stream stream = strings.stream();
            stream.forEach(System.out::println);
    //        stream.forEach(System.out::println);   // 不加注释,会对stream操作两次,出现java.lang.IllegalStateException: stream has already been operated upon or closed
    
            // 1-3 或者通过已有的数据来创建Stream创建流,可以使用Stream类提供的Stream.of()方法,直接返回一个由指定元素组成的流。
            Stream<String> streamxx = Stream.of("aaa","bbb","ccc");
            streamxx.forEach(
                    i->System.out.println("(2)"+i)
            );
    
            //2-1 filter 过滤条件  中间操作
            List<String> lists = Arrays.asList("AAA","","BBB","CCC");
            lists.stream().filter(s -> s.length()>0).forEach(i -> System.out.println("filter后:"+i));
    
            // 2-2 map映射 中间操作
            List<Integer> numbers = Arrays.asList(11,2,3,14,14);
            numbers.stream().map(i->i*i).forEach(i -> System.out.println("平方数后:"+i));
    
            // 2-3 limit/skip limit ,返回 Stream 的前面 n 个元素;skip 则是扔掉前 n 个元素
            System.out.println("执行limit后:");
            numbers.stream().limit(4).forEach(System.out::println);
    
            // 2-4 sorted 方法用于对流进行排序
            System.out.println("排序后:");
            numbers.stream().sorted().forEach(System.out::println);
    
            // 2-5 distinct主要用来去重,以下代码片段使用 distinct 对元素进行去重
            System.out.println("distinct 对元素进行去重: ");
            numbers.stream().distinct().forEach(System.out::println);
    
            // 3 Stream的最终操作 : 计算出流中元素的个数、将流装换成集合等。
            //3-1 最终结果讨论 count用来统计流中的个数
            System.out.println("count用来统计流中的元素个数: ");
            System.out.println(numbers.stream().count());
    
            //3-2 forEach 遍历单个子元素进行操作,ints()返回的是一个intStream()
            new Random().ints().limit(4).forEach(System.out::println);
    
            //3-3 collect 就是一个规约操作,可以接受各种做法作为参数,将流中的元素累计汇成集合框架中的一种,如List
            List<String> string3 = Arrays.asList("Hollis", "HollisChuang", "hollis","Hollis666", "Hello", "HelloWorld", "Hollis");
            string3  = string3.stream().filter(string -> string.startsWith("Hollis")).collect(Collectors.toList());
            System.out.println("string3的collect后的测试是:"+string3);
    
        }
    }
    
    

    测试结果

    111
    222
    333
    (2)aaa
    (2)bbb
    (2)ccc
    filter后:AAA
    filter后:BBB
    filter后:CCC
    平方数后:121
    平方数后:4
    平方数后:9
    平方数后:196
    平方数后:196
    执行limit后:
    11
    2
    3
    14
    排序后:
    2
    3
    11
    14
    14
    distinct 对元素进行去重: 
    11
    2
    3
    14
    count用来统计流中的元素个数: 
    5
    1651256773
    1647013782
    -1530012352
    1888788786
    string3的collect后的测试是:[Hollis, HollisChuang, Hollis666, Hollis]
    
  • 相关阅读:
    《编写可维护的JavaScript》读书笔记
    第十四天:还是看代码
    第十三天:过了一遍rt_thread,看代码架构
    第十二天:rt_thread系统
    第十一天:要做stm32了
    第十天:没太专注工作
    第九天:rtc问题查找与测试
    第八天:android编译环境搭建
    第七天:终于看到板子了
    第六天和周末:感慨下这周
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/11520708.html
Copyright © 2011-2022 走看看