当前位置: 首页 > news >正文

【Java】Java流中的API

 

dd3f5d43598c2a98a8352180c00a09de.png

人不走空

 

                                                                      

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

 

da14e5cf865a427ea959fca470d8245a.gif

0892612a1c974a15aee1810997f71951.png 

目录

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

概述:

关键概念:

使用案例 :

摘要:

作者其他作品:


概述:


Java Stream API 有助于处理元素序列,提供过滤、映射和减少等操作。流可用于以声明方式执行操作,类似于对数据的类似 SQL 的操作

关键概念:


流:支持顺序和并行聚合操作的元素序列

中间操作:返回另一个流且延迟的操作(例如,filter、map)

码头运营:产生结果或副作用且不懒惰的操作(例如,collect、forEach)

示例场景:
假设我们有一个 Person 对象列表,并且我们希望使用 Stream API 对该列表执行各种操作

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>public class Person {private String name;private int age;private String city;public Person(String name, int age, String city) {this.name = name;this.age = age;this.city = city;}public String getName() {return name;}public int getAge() {return age;}public String getCity() {return city;}@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + ", city='" + city + "'}";}
}
</code></span></span>

使用案例 :

  1. 滤波
  2. 映射
  3. 收集
  4. 减少
  5. 平面映射
  6. 排序
  7. 查找和匹配
  8. 统计学

滤波:过滤允许您选择与给定条件匹配的元素

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class Main {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30, "New York"),new Person("Bob", 20, "Los Angeles"),new Person("Charlie", 25, "New York"),new Person("David", 40, "Chicago"));// Filter people older than 25List<Person> filteredPeople = people.stream().filter(person -> person.getAge() > 25)                                       .collect(Collectors.toList());filteredPeople.forEach(System.out::println);}
}
</code></span></span>

映射:映射使用函数将每个元素转换为另一种形式

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>public class Main {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30, "New York"),new Person("Bob", 20, "Los Angeles"),new Person("Charlie", 25, "New York"),new Person("David", 40, "Chicago"));// Get list of namesList<String> names = people.stream().map(Person::getName).collect(Collectors.toList());names.forEach(System.out::println);}
}
</code></span></span>

收集:收集将流的元素收集到集合或其他数据结构中

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>public class Main {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30, "New York"),new Person("Bob", 20, "Los Angeles"),new Person("Charlie", 25, "New York"),new Person("David", 40, "Chicago"));// Collect names into a setSet<String> uniqueCities = people.stream().map(Person::getCity).collect(Collectors.toSet());uniqueCities.forEach(System.out::println);}
}
</code></span></span>

减少:Reducing 使用关联累积函数对流的元素执行 Reduction 并返回 Optional

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>public class Main {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30, "New York"),new Person("Bob", 20, "Los Angeles"),new Person("Charlie", 25, "New York"),new Person("David", 40, "Chicago"));// Sum of agesint totalAge = people.stream().map(Person::getAge).reduce(0, Integer::sum);System.out.println("Total Age: " + totalAge);}
}
</code></span></span>

平面映射 :FlatMapping 将嵌套结构展平到单个流中。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>public class Main {public static void main(String[] args) {List<List<String>> namesNested = Arrays.asList(Arrays.asList("John", "Doe"),Arrays.asList("Jane", "Smith"),Arrays.asList("Peter", "Parker"));List<String> namesFlat = namesNested.stream().flatMap(List::stream).collect(Collectors.toList());namesFlat.forEach(System.out::println);}
}
</code></span></span>

排序:排序允许您对流的元素进行排序

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>public class Main {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30, "New York"),new Person("Bob", 20, "Los Angeles"),new Person("Charlie", 25, "New York"),new Person("David", 40, "Chicago"));// Sort by ageList<Person> sortedPeople = people.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());sortedPeople.forEach(System.out::println);}
}
</code></span></span>

查找和匹配:
查找和匹配操作检查流的元素,看看它们是否与给定的谓词匹配

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>public class Main {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30, "New York"),new Person("Bob", 20, "Los Angeles"),new Person("Charlie", 25, "New York"),new Person("David", 40, "Chicago"));// Find any person living in New YorkOptional<Person> personInNY = people.stream().filter(person -> "NewYork".equals(person.getCity())).findAny();personInNY.ifPresent(System.out::println);// Check if all people are older than 18boolean allAdults = people.stream().allMatch(person -> person.getAge() > 18);System.out.println("All adults: " + allAdults);}
}</code></span></span>

统计学:Stream API 还可用于执行各种统计操作,例如计数、平均等。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>public class Main {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30, "New York"),new Person("Bob", 20, "Los Angeles"),new Person("Charlie", 25, "New York"),new Person("David", 40, "Chicago"));// Count number of peoplelong count = people.stream().count();System.out.println("Number of people: " + count);// Calculate average ageDouble averageAge = people.stream().collect(Collectors.averagingInt(Person::getAge));System.out.println("Average Age: " + averageAge);}
}</code></span></span>

实际示例:
这是一个使用上述几个功能的综合示例:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>import java.util.*;
import java.util.stream.*;public class Main {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30, "New York"),new Person("Bob", 20, "Los Angeles"),new Person("Charlie", 25, "New York"),new Person("David", 40, "Chicago"));// Filter, map, sort, and collectList<String> names = people.stream().filter(person -> person.getAge() > 20).map(Person::getName).sorted().collect(Collectors.toList());names.forEach(System.out::println);// Find the oldest personOptional<Person> oldestPerson = people.stream().max(Comparator.comparing(Person::getAge));oldestPerson.ifPresent(person -> System.out.println("Oldest Person: " + person));// Group by cityMap<String, List<Person>> peopleByCity = people.stream().collect(Collectors.groupingBy(Person::getCity));peopleByCity.forEach((city, peopleInCity) -> {System.out.println("People in " + city + ": " + peopleInCity);});// Calculate total and average ageIntSummaryStatistics ageStatistics = people.stream().collect(Collectors.summarizingInt(Person::getAge));System.out.println("Total Age: " + ageStatistics.getSum());System.out.println("Average Age: " + ageStatistics.getAverage());}
}</code></span></span>

摘要:


Java Stream API 是用于处理集合和数据的强大工具。它允许:

滤波:根据条件选择元素

映射:转换元素

收集:将元素收集到集合或其他数据结构中

减少:将元素组合成一个结果。

平面映射:展平嵌套结构。

排序:Order 元素。

查找和匹配:根据条件检查元素。

统计学:执行统计操作。

了解这些功能将帮助您编写更简洁、更简洁、更易读的代码。

 


作者其他作品:

【Java】Spring循环依赖:原因与解决方法

OpenAI Sora来了,视频生成领域的GPT-4时代来了

[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读

【Java】深入理解Java中的static关键字

[Java·算法·简单] LeetCode 28. 找出字a符串中第一个匹配项的下标 详细解读

了解 Java 中的 AtomicInteger 类

算法题 — 整数转二进制,查找其中1的数量

深入理解MySQL事务特性:保证数据完整性与一致性

Java企业应用软件系统架构演变史

 

 

相关文章:

  • 通用信息提取数据预处理
  • MySQL——索引下推
  • Mysql基础-多表查询
  • 280 基于matlab的摇号系统GUI界面仿真MATLAB程序
  • Rust-10-数据类型
  • 文心一言使用技巧
  • 计算机网络:数据链路层 - 扩展的以太网
  • uni-app uni-swipe-action 滑动操作状态恢复
  • 智能合约中外部调用漏洞
  • 使用 Java 操作 Redis 数据类型的详解指南
  • Python怎么调用JAR包:揭秘跨语言交互的奥秘
  • QT4-QT5升级(3)GBK-UTF-8-乱码“常量中有换行符”
  • VCAST创建单元测试工程
  • 【Java】解决Java报错:NumberFormatException
  • [qt] qt程序打包以及docker镜像打包
  • android 一些 utils
  • docker-consul
  • Elasticsearch 参考指南(升级前重新索引)
  • go append函数以及写入
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • miaov-React 最佳入门
  • python docx文档转html页面
  • spring学习第二天
  • sublime配置文件
  • WePY 在小程序性能调优上做出的探究
  • 关于Flux,Vuex,Redux的思考
  • 基于 Babel 的 npm 包最小化设置
  • 七牛云假注销小指南
  • 什么软件可以剪辑音乐?
  • 携程小程序初体验
  • 源码安装memcached和php memcache扩展
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 阿里云ACE认证之理解CDN技术
  • ​Java并发新构件之Exchanger
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #100天计划# 2013年9月29日
  • #QT(串口助手-界面)
  • (2)空速传感器
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (9)STL算法之逆转旋转
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)测试工具
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (转)菜鸟学数据库(三)——存储过程
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .Net Core和.Net Standard直观理解
  • .NET Framework杂记
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .net分布式压力测试工具(Beetle.DT)