首页 > 编程语言 >Java初学者笔记-06、Stream流

Java初学者笔记-06、Stream流

时间:2025-01-19 18:33:35浏览次数:1  
标签:Java Stream stream 元素 static sorted 06 public

什么是Stream流

JDK8开始新增的一套API,可以用于链式操作集合或者数组的数据。
优势: Stream流大量的结合了Lambda的语法风格来编程,功能强大,性能高效,代码简洁,可读性好。

list.stream().filter(s -> s.startswith("张")).filter(s -> s.Length() == 3).collect(Collectors.toList());

使用Stream流

  1. 获取Stream流。(开启)
  2. 调用流水线的各种操作。(处理)
  3. 获取处理的结果。(终结)

获取Stream流(开启)

// 集合
// default Stream <E> stream()
List<String> list = new ArrayList<>();
list.stream();
// ===============
// 数组
// public static <T> Stream<T> stream(T[] array)
// public static <T> Stream<T> of(T... values)
String[] names =  {"1","2","3"};
Arrays.stream(names);
// 或者
Stream.of(names);

扩展:可变参数

public static <T> Stream<T> of(T... values)

  1. 三个点代表可变参数,数据类型…参数名称,可以匹配多个参数或者一个数组。
  2. 可变参数在形参列表中只能有一个,且可变参数必须放在形参列表的最后面。
  3. 可变参数对内实际上就是一个数组。下面中nums就是数组。
public static void sum(int age, int...nums){
System.out.println(nums.Length);
System.out.println(Arrays.toString(nums));
}
  1. 可以不传数据给可变参数;也可以传一个或者同时传多个数据给它。常常用它来灵活地接收数据。

Stream流的常用中间方法

中间方法:用完方法返回一个新流,继续链式编程。

Stream提供的常用中间方法 说明
Stream filter(Predicate<? super T> predicate) 用于对流中的数据进行过滤
Stream sorted() 对元素进行升序排序
Stream sorted(Comparator<? super T> comparator) 按照指定规则排序
Stream limit(long maxSize) 获取前几个元素
Stream skip(long n) 跳过前几个元素
Stream distinct() 去除流中重复的元素
Stream map(Function<? super T,? extends R> mapper) 对元素进行加工,并返回对应的新流
static Stream concat(Stream a, Stream b) 合并a和b两个流为一个流
其中,map方法是映射加工方法,把流上原来的数据拿出来变成新数据又放到流上去。
scores.stream().sorted().forEach(System.out::println);
scores.stream().sorted((s1,s2) -> Double.compare(s2,s1)).forEach(System.out::println);
scores.stream().sorted((s1, s2) -> Double.compare(s2, s1)).limit(2).forEach(System.out::println);// 取前两名
scores.stream().sorted((s1, s2) -> Double.compare(s2, s1)).skip(2);// 跳过前两名
scores.stream().map(s -> "加10分后:" + (s +10)).forEach(System.out::println);// 每人加10分

Stream流的常用终结方法

终结方法指的是调用完成后,不会返回新Stream了,没法继续使用流了。
流只能用一次!终结后就不能用了。

Stream提供的常用终结方法 说明
void forEach(Consumer action) 对此流运算后的元素执行遍历
long count() 统计此流运算后的元素个数
Optional max(Comparator<? super T> comparator) 获取此流运算后的最大值元素
Optional min(Comparator<? super T> comparator) 获取此流运算后的最小值元素

注意:max,min返回的是Optional对象,需要使用.get()获取这个对象。

Stream流的收集

就是把Stream流操作后的结果转回到集合或者数组中去返回。

list.stream().filter(s -> s.startsWith("3k")).collect(Collector.toList());
Stream提供的常用终结方法 说明
R collect(Collector collector) 把流处理后的结果收集到一个指定的集合中去
Object[] toArray() 把流处理后的结果收集到一个数组中去
Collectors工具类提供了具体的收集方式 说明
public static Collector tolist() 把元素收集到List集合中
public static Collector toSet() 把元素收集到Set集合中
public static Collector toMap(Function keyMapper , Function valueMapper) 把元素收集到Map集合中

标签:Java,Stream,stream,元素,static,sorted,06,public
From: https://www.cnblogs.com/subeipo/p/18679782/java-chu-xue-zhe-bi-ji06stream-liu

相关文章

  • 基础 Java
    基础Java跨平台通过虚拟机JVM实现并不是直接运行在操作系统中,而是运行在虚拟机中针对不同操作系统,安装不同的虚拟机JDK和JREJDK:Java开发工具包(包括JVM虚拟机,核心类库,开放工具)JRE:Java运行环境(JDK去掉部分工具,保留运行工具)关键......
  • Mysql 5.7解决windows本地无法开启服务-1067
    出现原因:我切换mysql8服务后,切换回去mysq5.7,然后报下面的问题。删除后应该可以 但是可能因为我有两个服务,一个5.7,一个8.0然后我继续报错:D:\Monkey\mysql-5.7.33-winx64\bin>netstartMySQL57mysql57服务正在启动.mysql57服务无法启动。服务没有报告任何错误。......
  • webWorker 开启javascript另外的线程
    javascript是一个单线程语音,因此所有执行代码放在一个线程里面因此javascriot是从上到小执行代码的,但是遇到大量切繁重的任务例如图形计算请求,轮询等需要耗时的任务虽然可以使用异步来避免造成页面渲染的阻塞,但是异步任务完成后还要对数据进行处理因此也会导致页面的卡顿,因此......
  • 【Java】Java UML 类图绘制解析:结构与工具类型详解
    前言常用UML绘图工具1、VisualParadigm2.Lucidchart3.Draw.io(现名diagrams.net)4.PlantUML(推荐)5.StarUML类与类之间的关系UML中的关系是面向对象关系。......
  • Java流程控制
    scanner对象之前学的基本语法没有实现程序与人的交互,现在可以使用scanner类来获取用户的输入(之前都是我们在输出程序,现在可以搞个程序然后输入数据得到结果)基本语法Scanners=newScanner(System.in);通过scanner类的next()和nextLine()获取输入字符串,在读取前一般需要使用hasNex......
  • java基本运算符
    在运算中:运算时定义不同的类型时,结果都自动升为混合运算类型中最高类型关系运算符:返回的结果:正确,错误,布尔值关系运算符%:模运算,取余+,-,*,/++:自增(b=a++即b=a+1,先执行a+1在赋值)(b=++a即b=a+1,a+1后在赋值)--:自减(b=a--即b=a-1,先执行a-1在赋值)(b=--a即b=a-1,a-1后在赋值)幂运算:2的三......
  • Java线程相关知识及线程池学习二
    阻塞队列定义在Java中,阻塞队列(BlockingQueue)是一种线程安全的队列。阻塞队列是Java并发包(java.util.concurrent)中的一个重要组件,常用于生产者-消费者模式中,一个线程产生数据放入队列,另外一个从队列取出数据进行消费。主要有两种情况在尝试添加元素到队列中时,如果队列已......
  • java类型转换
    由于java是强类型语言,所以在运算的时候需要用到类型转换低(byte、short、char——>int——>long——>float——>double)高运算中不同类型的数据先转化为同一类型,然后在进行运算强制转换:(类型)变量名(高——>低)/自动转换(低——>高)注意点不能对布尔值进行转换不能对象类型转换......
  • 深入理解 Java 双列集合:Map 家族的探索与实践
    在Java编程的世界里,集合框架是组织和操作数据的强大工具。其中,双列集合以独特的键值对存储方式,为我们处理数据提供了别样的思路。本文将深入探讨Java双列集合的核心概念、常见实现类及其应用场景。双列集合的基本特性双列集合,区别于单列集合,它一次存储一对数据,即键(Key)和......
  • 偷偷的学Java
    序章:为何要偷偷学Java?•Java,不仅仅是一种编程语言• 偷偷学Java,快速提升你的竞争力•Java学习秘籍第一章:Java的神秘面纱•Java的起源与发展历程•Java的生态系统与应用场景•Java与其他编程语言的比较第二章:搭建你的Java秘密基地•安装Java开发工具包(JDK):不被发现......