首页 > 编程语言 >Java Stream流的使用

Java Stream流的使用

时间:2022-10-27 10:15:55浏览次数:43  
标签:Digit Java Stream stream list collect 使用 new

流相关的方法可以分为三种类型,分别是:获取Stream流、中间方法、终结方法。中间方法会返回当前流,可以方便的进行链式调用。

流不可重复使用,否则会报错:

java.lang.IllegalStateException: stream has already been operated upon or closed

    // 获取流的方式
    List<Integer> list = Arrays.asList(1, 2, 4, 5, 5, 6, 7, 0);
    String [] strArr = new String[]{"aaa", "bbb", "aaa"};

    Stream<Integer> stream = list.stream();                             // 从列表获取流
    Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);           // 从可变参数获取流
    Stream<String> arrStream = Stream.of(strArr);                       // 从数组获取流

常见的中间方法:

方法 用途
Stream<T> filter(Predicate<? super T> predicate) 用于对流中的数据进行过滤。
Stream<T> limit(long maxSize) 获取前几个元素
Stream<T> skip(long n) 跳过前几个元素
Stream<T> distinct() 去除流中重复的元素。依赖(hashCode和equals方法)
static <T> Stream<T> concat(Stream a, Stream b) 合并a和b两个流为一个流(也会遍历流,不可执行两次)
Stream<T> sorted(Comparator<? super T> comparator) 对元素进行合并
Stream map(Function<? super T, ? extends R> mapper) 对每个元素进行处理
    // filter()
    stream.filter(x -> x > 0).filter(x -> x < 5).forEach(System.out::println);
    
    // limit()
    integerStream.limit(3).forEach(System.out::println);
    
    // skip()
    integerStream.skip(3).forEach(System.out::println);

    // 去重
    arrStream.distinct().forEach(System.out::println);

    // 可将不同类型的Stream拼接到一起,不能执行两次
    Stream<? extends Serializable> concat1 = Stream.concat(stream, arrStream);
    
    // 将相同元素拼接到一起后,可以直接用一个类型接收
    Stream<Integer> concat = Stream.concat(stream, integerStream);

    // 排序
    stream.sorted((x, y)->x - y).forEach(System.out::println);
  
    // map()
    List<Integer> collect = stream.map((Integer x) -> x * x).collect(Collectors.toList());

常见的收集函数:
| public static <T> Collector toList() | 把元素收集到List集合中 |
| <A> A[] toArray(IntFunction<A[]> generator) | 把元素收集到数组中 |
| public static <T> Collector toSet() | 把元素收集到Set集合中 |
| public static Collector toMap(Function keyMapper , Function valueMapper) | 把元素收集到Map集合中 |

    // 收集成List
    List<Digit> collect = list.stream().map(Digit::new).collect(Collectors.toList());

    // 收集成数组,两个方法等效,务必要转换成对应的数组类型。
    Integer[] integers = list.stream().toArray(length -> new Integer[length]);
    Integer[] digits = list.stream().toArray(Integer[]::new);   // 务必要用对应的类型
    
    // 转换成Set
    Set<Integer> collect1 = list.stream().collect(Collectors.toSet());

    Digit [] data =  new Digit[]{
        new Digit("aaa", 10),
        new Digit("bbb", 20)
    };

    // 转换成 Map
    Map<String, Integer> collect3 = Stream.of(data).collect(Collectors.toMap(Digit::getDesc, Digit::getValue));

标签:Digit,Java,Stream,stream,list,collect,使用,new
From: https://www.cnblogs.com/twilight0402/p/16831141.html

相关文章

  • 2、Java程序设计环境
    1、JDKJava开发工具箱在Java9之前,有32位和64位两个版本的Java开发工具包。现在Oracle公司不在开发32位版本,要使用OracleJDK,你需要有一个64位的操作系统。安装:从官方下......
  • 3、一个简单的Java应用程序
    /*1、Java中区分大小写,如果出现了大小写拼写错误,例如将main拼写成Main,则程序将无法运行。2、关键字public成为访问修饰符,用来控制程序的其他部分对这段代码的访问级别。......
  • Java 版本升级
    场景描述......
  • java标识符(java标识符区分大小写)
    Java中标识符定义的规则有哪些?Java中标识符定义的规则:1、类和接口名。每个字的首字母大写,含有大小写。例如,MyClass,HelloWorld,Time等。2、方法名。首字符小写,其余的首字母大......
  • java排序算法(Java排序算法图解)
    如何理解排序算法的C++算法?排序算法C++算法编辑C++自带的algorithm库函数中提供了排序算法如何理解排序算法的C++算法?排序算法C++算法编辑C++自带的algorithm库函数中提供了......
  • java开发工具(java开发工具排名)
    java开发工具有什么优点?它具有一系列优异的性能,比如:(1)高可易用性Jupiter使用简单的文件向导方式,来呈现整个应用系统以及工作流程,然后将不同应用条件分为不同属性接触了几个......
  • java并发编程(java并发编程实战过时了吗)
    Java如何进行并发多连接socket编程呢?println("hasreceive。。。。");out。flush();if(str。equals("end"))break;client。close();catch(IOExceptionex)finally......
  • mac下anaconda的安装及简单使用
    安装流程:1.下载适用的安装包网址:https://www.anaconda.com/download/#macos2.双击安装1>回答简介,自述和许可证屏幕上的提示。2>可以自己选......
  • java接口的作用和意义(java语言中的什么具有特殊意义和作用)
    Java接口和Java抽象类有哪些不同呢?3、从第2点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为Java接口和Java......
  • java导出excel(java导出excel数据量大 优化)
    如何利用JAVA生成Excel文件packagebeans.excel;importjava.io.IOException;importjava.io.OutputStream;importjxl.Workbook;importjxl.write.Label;importjxl.write.......