java8 .stream()/.filter()/.sorted()/.map()/.collect()/.findFirst()/.isPresent()/.orElse()/.flatMap()

本文介绍Java8新增的流API特性,包括stream、filter、sorted、map、collect等方法的使用,以及flatMap和Optional的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java8引入了很多新的方法,这篇文章简单介绍一下其中一部分的使用

.stream()

stream()把一个源数据,可以是集合,数组,I/O channel, 产生器generator 等,转化成流

.filter()

filter()方法用于通过设置的条件过滤出元素

.sorted()

sorted()用于对流进行排序

.map()

map()用于映射每个元素到对应的结果

.collect()

Collectors类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串,collect()内可以用collectors进行转换:

.collect(Collectors.toList());//列表
.collect(Collectors.joining(", "));//字符串

.findFirst()

findFirst()用于找到第一次出现的元素

.isPresent()

isPresent()可以判断所找到的值是否是null

.orElse()

orElse(null)表示如果一个都没找到返回null

orElse()中可以塞默认值。如果找不到就会返回orElse中你自己设置的默认值。

.flatMap()

flatMap()将Stream中的每个元素映射为一个流,然后将这些流合并成一个新的流。

补充:

Optional<T> findFirst() 

findFirst方法返回Optional包含流中第一个元素的元素,如果findFirst选择的元素为null,它将抛出NullPointerException

所以推荐将findFirst与orElse连用规避空指针的问题,如下所示:

A a = AList.stream().filter(a -> "小明".equals(a.getUserName())) .findFirst().orElse(null);

举例

if(AList.stream().filter(a -> "小明".equals(a.getUserName())) .findFirst().isPresent()){
    List<A> list = AList.stream().filter(a -> "小明".equals(a.getUserName())) .collect(Collectors.toList());
}
<think>我们被要求解释一系列与Fortran项目操作相关的菜单命令。这些命令通常出现在集成开发环境(IDE)中,如Code::Blocks的Fortran项目。下面将逐一解释每个命令的功能。</think>### Fortran 95 IDE 项目操作命令详解 这些命令通常出现在 Fortran IDE(如 Code::Blocks 的 Fortran 插件)的项目管理菜单中,以下是每个命令的详细解释: #### 1. Save project **功能**:保存当前项目配置 **说明**: - 将项目设置(文件列表、编译选项、构建目标等)保存到项目文件(通常为 `.cbp` 文件) - 在修改项目后必须执行此操作以保留更改 - **快捷键**:通常为 `Ctrl + S` #### 2. Add files... **功能**:向项目添加单个文件 **说明**: - 打开文件选择对话框,选择单个源文件(`.f90`, `.f95`)或头文件(`.inc`) - 文件将被添加到当前选定的虚拟文件夹中 - **操作流程**: ```mermaid graph TD A[点击 Add files...] --> B[文件选择对话框] B --> C[选择文件] C --> D[文件添加到项目树] ``` #### 3. Add files recursively... **功能**:递归添加文件夹中的所有文件 **说明**: - 添加指定文件夹及其子目录中的所有匹配文件 - 特别适用于大型项目,避免手动添加多个文件 - **文件过滤**:通常支持通配符(如 `*.f90`, `*.inc`) #### 4. Remove files... **功能**:从项目中移除文件 **说明**: - 从项目树中移除选定的文件(不删除物理文件) - 文件将不再参与编译和构建 - **重要提示**:移除后文件仍保留在磁盘上 #### 5. Close project **功能**:关闭当前项目 **说明**: - 关闭所有项目相关文件(源文件、头文件等) - 重置项目相关设置 - **后续操作**:可打开新项目或创建新项目 #### 6. Find file... **功能**:在项目中查找文件 **说明**: - 打开搜索对话框,按文件名搜索项目中的文件 - 支持模糊匹配和通配符 - **快捷键**:通常为 `Ctrl + Shift + F` #### 7. Project tree **功能**:显示/隐藏项目目录树 **说明**: - 切换项目文件树的显示状态 - 树形结构展示项目文件组织: ``` 项目根目录 ├── 虚拟文件夹1 │ ├── module1.f90 │ └── submodule1.f90 ├── 虚拟文件夹2 │ ├── main.f90 │ └── utils.f90 └── 外部依赖 └── external_lib.f90 ``` #### 8. Add new virtual folder... **功能**:创建虚拟文件夹 **说明**: - 在项目树中创建逻辑分组文件夹(不创建物理目录) - 用于组织项目文件(如 `Sources`, `Headers`, `Tests`) - **用途**: - 按功能模块组织文件 - 为不同构建目标(Debug/Release)分组文件 #### 9. Format this project (AStyle) **功能**:使用 AStyle 格式化项目代码 **说明**: - 应用代码格式化规则到所有项目文件 - **典型格式化规则**: ```fortran ! 格式化前 program test;integer::i;real::x;do i=1,10;x=i*0.1;print*,x;end do;end ! 格式化后(AStyle) program test integer :: i real :: x do i = 1, 10 x = i * 0.1 print *, x end do end program test ``` - **配置选项**:缩进、空格、换行等可通过 `Settings > Editor > AStyle` 配置 #### 10. Reparse this project **功能**:重新解析项目 **说明**: - 强制IDE重新扫描所有项目文件 - **使用场景**: - 添加新文件后符号解析失败 - 修改了项目包含路径 - 代码补全/跳转功能失效 - **后台过程**:重建代码符号表和语法树 #### 11. Build **功能**:增量构建项目 **说明**: - 仅编译修改过的文件并链接 - **构建流程**: ```mermaid graph LR A[检查文件修改时间] --> B{文件已修改?} B -->|是| C[编译该文件] B -->|否| D[跳过编译] C --> E[链接所有目标文件] D --> E ``` - **输出**:生成可执行文件(如 `project.exe`) #### 12. Rebuild **功能**:完整重建项目 **说明**: - 清除所有中间文件,从头开始完整编译 - **与Build的区别**: | **操作** | 编译范围 | 清除中间文件 | 使用场景 | |----------|----------|--------------|----------| | Build | 修改过的文件 | 否 | 日常开发 | | Rebuild | 所有文件 | 是 | 依赖变更后 | #### 13. Clean **功能**:清理构建产物 **说明**: - 删除所有中间文件和输出文件(`.o`, `.mod`, `.exe`) - **清理内容**: - 对象文件(`*.o`, `*.obj`) - 模块文件(`*.mod`) - 可执行文件 - 临时文件 #### 14. Build options... **功能**:配置构建选项 **说明**: - 打开项目构建配置对话框 - **关键配置项**: ```fortran ! 编译器选项示例 -O2 ! 优化级别 -g ! 包含调试信息 -fcheck=all ! 运行时检查 -Iinclude/ ! 包含路径 -Llib/ ! 库路径 -lblas ! 链接BLAS库 ``` - **配置类别**: - 编译器设置 - 链接器设置 - 调试选项 - 预处理器定义 - 构建目标(Debug/Release) #### 15. Open Project Folder in File Browser **功能**:在文件浏览器中打开项目目录 **说明**: - 使用系统默认文件管理器打开项目根目录 - **用途**: - 快速访问项目资源文件 - 管理非代码文件(数据、文档) - 执行文件操作(复制、重命名) #### 16. Properties... **功能**:查看/编辑项目属性 **说明**: - 打开项目综合属性对话框 - **包含信息**: ```fortran ! 典型属性页 1. 常规信息 - 项目名称 - 项目位置 - 创建日期 2. 文件列表 - 源文件 - 头文件 - 排除文件 3. 依赖关系 - 外部库 - 项目依赖 4. 版本控制 - 关联的版本控制系统(Git/SVN) ``` - **编辑功能**:修改项目元数据和基本设置 ### 项目操作最佳实践 1. **文件组织**: ```mermaid graph TD P[项目根目录] --> Src[Sources] P --> Include[Headers] P --> Data[Data Files] P --> Docs[Documentation] Src --> Core[Core Modules] Src --> Utils[Utilities] Src --> Main[Main Program] ``` 2. **构建流程**: ```mermaid graph TB A[Clean] --> B[Rebuild] B --> C[运行测试] C --> D{测试通过?} D -->|是| E[发布构建] D -->|否| F[调试修复] ``` 3. **快捷键指南**: | **操作** | 常见快捷键 | |------------------|-------------| | Build | F9 | | Rebuild | Ctrl+F9 | | Run | F10 | | Build + Run | F11 | | Save project | Ctrl+S | | Find file | Ctrl+Shift+F|
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值