首页 > 编程语言 >java .stream(). 使用介绍 Streams API

java .stream(). 使用介绍 Streams API

时间:2024-08-12 16:51:10浏览次数:6  
标签:java stream Stream 元素 myList API 操作

Java 8 引入了 Streams API,它允许我们以声明性方式处理序列的数据。.stream() 是这一API的核心方法,用于从一个数据源(如数组、集合等)创建一个流(Stream)。以下是 .stream() 方法的一些基本使用介绍:

1. 从集合创建流

List<String> myList = Arrays.asList("a", "b", "c"); Stream<String> stream = myList.stream();

  

2. 从数组创建流

 
String[] myArray = {"a", "b", "c"}; Stream<String> streamFromArray = Arrays.stream(myArray);

 

3. 并行流

如果你想要并行处理数据,可以使用 .parallelStream()

 
Stream<String> parallelStream = myList.parallelStream();

 

4. 中间操作

中间操作是从一个流到另一个流的惰性操作,不会立即执行,常见的中间操作包括:

  • filter(Predicate):过滤出符合条件的元素。
  • map(Function):将每个元素转换成另一种形式。
  • distinct():去除重复的元素。
  • sorted() 或 sorted(Comparator):对流中的元素进行排序。
 
stream.filter(s -> s.startsWith("a")) .map(String::toUpperCase) .distinct() .sorted() .forEach(System.out::println);

 

5. 终端操作

终端操作是实际执行流操作的步骤,常见的终端操作包括:

  • forEach(Consumer):对流中的每个元素执行操作。
  • count():返回流中元素的总数。
  • reduce(T identity, BinaryOperator):将流中的元素通过某种方式合并成一个值。
  • collect(Collector):将流中的元素收集到一个新集合。
 
long count = stream.filter(s -> s.startsWith("a")).count(); String joined = stream.map(String::toUpperCase).collect(Collectors.joining(", "));

 

6. 组合使用

流操作可以组合使用,先进行中间操作,然后执行终端操作。

 
int sum = myList.stream() .mapToInt(Integer::parseInt) .sum();

 

7. 使用 Optional 与 Stream

Optional 类型也可以转换成流。

 
Optional<String> optional = Optional.of("Hello"); Stream<String> optionalStream = optional.stream();

 

注意事项

  • 流操作是懒加载的,只有当终端操作被执行时,中间操作才会被实际执行。
  • 流只能被遍历一次,一旦执行了终端操作,流就会关闭。
  • 使用并行流时,需要注意线程安全问题。

Streams API 提供了一种强大而灵活的方式来处理集合数据,使得代码更加简洁和易于理解。

标签:java,stream,Stream,元素,myList,API,操作
From: https://www.cnblogs.com/sangwei/p/18355271

相关文章

  • Java基础语法
    Java基础语法注释写代码要有好的规范三种注释:单行注释publicclassHelloWorld{publicstaticvoidmain(String[]args){//单行注释//输出一个HelloWorld!System.out.println("HelloWorld!");}}多行注释//多行注释......
  • Java Reentrantlock可重入锁原理 | 源码探究
    一、基本概念ReentrantLock是Java中提供的一个可重入互斥锁,它是java.util.concurrent.locks包中的一个接口Lock的实现类。ReentrantLock提供了比使用synchronized关键字更强大的锁定机制,例如 公平锁 和 非公平锁 选择、尝试锁定、可中断锁定等。ReentrantLock......
  • 【BAPI_ACC_DOCUMENT_POST 】会计凭证创建抬头文本没有写入
    如果实现AC_DOCUMENT中的类IF_EX_AC_DOCUMENT的方法CHANGE_INITIAL或CHANGE_AFTER_CHECK,当使用BAPI_ACC_DOCUMENT_POST创建会计凭证时,抬头文本将会为空。解决方法就是将一段逻辑添加到CHANGE_INITIAL和CHANGE_AFTER_CHECK中。后来发现项目中确实有人使用了AC_DOCUMENT这个......
  • Python Redis Stream【生产者=》消费者模式】
    1importredis2importtime3fromtypingimportDict,List,Tuple,Any,Optional45fromconfig.modelimportsettings6frompydanticimportBaseModel789classStreamMessage(BaseModel):10message_id:str11message_da......
  • [Java/SQL] 自动去除SQL注释
    0引言在数据连接(池)框架、数据服务/DatatoAPI等中间平台中,因部分数据库不允许SQL中存在注释信息(如:Redis、OpenGemini等;当然,MYSQL、INFLUXDB等数据库是支持的),故存在这样一个需求:在提交到数据库的SQL,需对原始SQL的注释信息予以去除。以OpenGeminiV1.2.0数据库为例,如果......
  • Java基础-学习笔记08
    01类变量、类方法、main方法、代码块类变量(静态变量)类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。关于静态变量在内存中的存放地址,有两种说法,①认为静态变量......
  • JDK自带命令:深入理解Java程序的运行机制
    JDK(JavaDevelopmentKit)是Java开发和运行环境的核心,它提供了丰富的命令和工具来帮助我们更好地理解和控制Java程序的运行。本文将详细介绍JDK自带的一些关键命令,以及它们的详细参数和执行结果。1.jps(JavaVirtualMachineProcessStatusTool)jps命令用于列出正在运行的......
  • api代理爬虫:了解其基本原理和使用方法
    ​API代理爬虫的使用指南在数据驱动的时代,API(应用程序接口)成为了获取数据的重要途径。而通过API代理爬虫,我们可以高效地采集和处理数据,尤其是在面对反爬虫机制时。本文将为你介绍API代理爬虫的基本概念、工作原理以及如何使用。1.什么是API代理爬虫?API代理爬虫是一种结合了......
  • JAVA中的File类
    File类概述`File`类提供了一系列的方法来操作文件和目录。它不直接访问文件内容本身,而是操作文件系统的属性,如文件大小、最后修改时间、文件类型(普通文件、目录等)等。需要注意的是,`File`对象本身只是文件路径的抽象表示,只有当通过`File`对象调用相关方法时,才会与底层文件系统......
  • Vue3+vite+axios+.net api 配置
    exportdefaultdefineConfig({plugins:[vue()],resolve:{alias:{"@":fileURLToPath(newURL("./src",import.meta.url)),},},server:{host:"0.0.0.0",open:true,//启动项目自动弹出浏览器port:&qu......