Java学习day13

流(Stream)

流是一个非常强大的概念,它提供了一种高效且便捷的方式来处理集合数据。你可以将流看作是一系列数据项的管道,你可以对这些数据进行各种操作,如过滤、映射、排序和归约。

流的创建

在Java中,你可以通过集合、数组或输入/输出操作来创建流。下面是一些创建流的示例:

  • 通过集合创建流:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Stream<String> stream = names.stream();
  • 通过数组创建流:
String[] names = {"Alice", "Bob", "Charlie"};
Stream<String> stream = Arrays.stream(names);
  • 通过输入/输出操作创建流:
try (Stream<String> stream = Files.lines(Paths.get("data.txt"))) {// 处理流中的数据
} catch (IOException e) {e.printStackTrace();
}

流的操作

流提供了丰富的操作方法,你可以使用它们来处理流中的数据。下面是一些常见的流操作:

  • 过滤操作:使用filter方法根据指定的条件过滤流中的元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
  • 映射操作:使用map方法将流中的元素映射为另一个元素。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> nameLengths = names.stream().map(String::length).collect(Collectors.toList());
  • 排序操作:使用sorted方法对流中的元素进行排序。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> sortedNames = names.stream().sorted().collect(Collectors.toList());
  • 归约操作:使用reduce方法将流中的元素归约为一个值。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, (a, b) -> a + b);

流的分类

  1. 根据功能分类:

    • 节点流(Node Stream):

      • 描述:节点流直接与数据源或目标进行交互,提供最基本的读取和写入功能。
      • 包含的流类型:
        • 字节节点流(Byte Node Stream):用于处理字节数据的节点流。
          • 示例:InputStreamOutputStreamFileInputStreamFileOutputStream等。
        • 字符节点流(Character Node Stream):用于处理字符数据的节点流。
          • 示例:ReaderWriterFileReaderFileWriter等。
    • 缓冲流(Buffered Stream):

      • 描述:缓冲流是对节点流的包装,提供了缓冲功能,以提高I/O操作的效率。

      • 包含的流类型:

        • 缓冲字节流(Buffered Byte Stream):对字节节点流进行缓冲的流。

          • 示例:BufferedInputStreamBufferedOutputStream等。
        • 缓冲字符流(Buffered Character Stream):对字符节点流进行缓冲的流。

          • 示例:BufferedReaderBufferedWriter等。
    • 区别:节点流直接与数据源或目标进行交互,数据在读取或写入时不会进行缓冲,每次操作都涉及直接访问底层数据源或目标。缓冲流在读取或写入数据时,先将数据存储到内部的缓冲区,然后从缓冲区中读取或写入数据。这样可以减少对底层资源的直接访问次数,提高I/O操作的效率。

  2. 根据数据类型分类:

    • 字节流(Byte Stream):

      • 描述:字节流以字节为单位进行读取和写入操作,适用于处理二进制数据。

      • 包含的流类型:

        • 字节节点流(Byte Node Stream):直接与字节数据源或目标进行交互的节点流。
        • 缓冲字节流(Buffered Byte Stream):包装了字节节点流的缓冲流。
    • 字符流(Character Stream):

      • 描述:字符流以字符为单位进行读取和写入操作,适用于处理文本数据。
      • 包含的流类型:
        • 字符节点流(Character Node Stream):直接与字符数据源或目标进行交互的节点流。
        • 缓冲字符流(Buffered Character Stream):包装了字符节点流的缓冲流。
    • 区别:字节流处理的是二进制数据,适合于处理图像、音频、视频等非文本数据。字符流处理的是文本数据,提供了对字符编码的支持,适合于处理文本文件、配置文件等。

IO流

输入/输出(IO)

输入/输出(IO)是与外部环境进行数据交互的基本操作。在Java中,我们使用IO流来读取和写入数据。

IO流的分类

Java中的IO流分为字节流和字符流。字节流用于处理二进制数据,而字符流用于处理文本数据。

常见的字节流类有:InputStreamOutputStreamFileInputStreamFileOutputStream等。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class ByteNodeStreamExample {public static void main(String[] args) {try {FileInputStream inputStream = new FileInputStream("input.txt");FileOutputStream outputStream = new FileOutputStream("output.txt");int data;while ((data = inputStream.read()) != -1) {outputStream.write(data);}inputStream.close();outputStream.close();} catch (IOException e) {e.printStackTrace();}}
}

缓冲

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class BufferedByteStreamExample {public static void main(String[] args) {try {BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream("input.txt"));BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("output.txt"));byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}inputStream.close();outputStream.close();} catch (IOException e) {e.printStackTrace();}}
}

常见的字符流类有:ReaderWriterFileReaderFileWriter等。

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class CharacterNodeStreamExample {public static void main(String[] args) {try {FileReader reader = new FileReader("input.txt");FileWriter writer = new FileWriter("output.txt");int data;while ((data = reader.read()) != -1) {writer.write(data);}reader.close();writer.close();} catch (IOException e) {e.printStackTrace();}}
}

缓冲

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class BufferedCharacterStreamExample {public static void main(String[] args) {try {BufferedReader reader = new BufferedReader(new FileReader("input.txt"));BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));String line;while ((line = reader.readLine()) != null) {writer.write(line);writer.newLine();}reader.close();writer.close();} catch (IOException e) {e.printStackTrace();}}
}

文件的读写操作

文件的读写是IO操作中最常见的任务之一。下面是一些文件读写的示例:

读取文件内容
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}
写入文件内容
try (BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt"))) {writer.write("Hello, World!");
} catch (IOException e) {e.printStackTrace();
}

文件(File)

在Java中,我们可以使用java.io.File类进行文件的常见操作,如创建文件、删除文件、重命名文件等。下面是一些文件处理的示例:

创建文件
File file = new File("data.txt");
try {if (file.createNewFile()) {System.out.println("文件创建成功!");} else {System.out.println("文件已存在!");}
} catch (IOException e) {e.printStackTrace();
}
删除文件
File file = new File("data.txt");
if (file.delete()) {System.out.println("文件删除成功!");
} else {System.out.println("文件删除失败!");
}
重命名文件
File file = new File("data.txt");
File newFile = new File("newdata.txt");
if (file.renameTo(newFile)) {System.out.println("文件重命名成功!");
} else {System.out.println("文件重命名失败!");
}
System.out.println("文件删除成功!");

} else {
System.out.println(“文件删除失败!”);
}


#### 重命名文件```java
File file = new File("data.txt");
File newFile = new File("newdata.txt");
if (file.renameTo(newFile)) {System.out.println("文件重命名成功!");
} else {System.out.println("文件重命名失败!");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx upstream server主动健康检测模块添加https检测功能[完整版]

目录 1 缘起1.1 功能定义2. 实现后的效果2.1 配置文件2.2 运行效果3. 代码实现3.1 配置指令3.1.1 配置指令定义:3.1.2 配置指令结构体:3.1.3 配置指令源码定义:3.2 模块的初始化3.3 添加新的健康检测类型的定义3.4 握手完成后的处理3. 5 发送http请求3.6 接收http响应3.7 连…

GPT升级信息:能记住用户的喜好和习惯!

OpenAI刚刚宣布了ChatGPT的一项激动人心的更新&#xff01; OpenAI在ChatGPT中新加了记忆功能和用户控制选项&#xff0c;这意味着GPT能够在与用户的互动中记住之前的对话内容&#xff0c;并利用这些信息在后续的交谈中提供更加相关和定制化的回答。 这一功能目前正处于测试阶段…

Shiro-11-web 介绍

配置 将Shiro集成到任何web应用程序的最简单方法是在web.xml中配置一个Servlet ContextListener和过滤器&#xff0c;该Servlet了解如何读取Shiro的INI配置。 INI配置格式本身的大部分是在配置页面的INI部分中定义的&#xff0c;但是我们将在这里介绍一些额外的特定于web的部…

介绍如何解决msvcr120.dll丢失问题,msvcp120.dll常见问题的解答

msvcr120.dll是Windows操作系统中的一个重要的动态链接库文件&#xff0c;它包含了许多与C运行库相关的函数。然而&#xff0c;有时用户在运行某些应用程序或游戏时可能会收到"msvcr120.dll丢失"的错误提示。本文将介绍如何解决msvcr120.dll丢失问题&#xff0c;并提…

【c语言】c语言转义字符详解

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;c语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

prometheus基于consul的服务发现

文章目录 一、基础二、安装consul下载地址启动consul访问consul 三、编写服务发现文件nodes.json四、prometheus配置consul发现修改prometheus.yml重启Prometheus 参考 一、基础 二、安装consul 下载地址 https://developer.hashicorp.com/consul/install 启动consul mkdi…

HCIP-MGRE实验配置、PPP的PAP认证与CHAP认证、MGRE、GRE网络搭建、NAT

实验要求 R5为ISP,只能进行IP地址配素&#xff0c;其所有地址均为公有IP地址R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方 R2与R5之间使用PPP的chap认证&#xff0c;R5为主认证方 R3与R5之间使用HDLC封装。R1/R2/R3构建一个MGRE环境&#xff0c;R1为中心站点;R1、R4间为…

Android 13.0 SystemUI下拉状态栏定制二 锁屏页面横竖屏通知栏都居中功能实现

1.前言 在13.0的系统rom定制化开发中,在关于systemui的锁屏页面功能定制中,由于在平板横屏通知栏功能中,通知栏总是显示在右边,并且是在右边居中显示的, 由于需要和竖屏显示一样,所以就需要用到在时钟下面显示通知栏,然后同样需要居中显示通知栏,所以就来分析下相关的…

前端vue金额用逗号分隔

实现效果 代码 template部分 <el-input v-model"state.val"></el-input><div>{{ priceFor(state.val) }}</div> js部分 const state reactive({ val: });const priceFor (val)> {if(!val){return }else if(val.length<4){return…

Z分数标准化

Z分数标准化是一种常用的数据标准化方法&#xff0c;用于将不同数据集的值转换为具有相同比例和零均值、标准差为1的标准正态分布。这种标准化方法对于机器学习和统计分析中的特征缩放和数据预处理非常有用。 标准化的步骤如下&#xff1a; 计算均值和标准差&#xff1a; 对于…

进程链信任-父进程欺骗

文章目录 前记普通权限的父进程欺骗ShllCode上线进程提权基础进程提权注入 前记 父进程欺骗作用&#xff1a; 进程链信任免杀进程提权 检测&#xff1a; etw 普通权限的父进程欺骗 #include<stdio.h> #include<windows.h> #include <TlHelp32.h>DWORD …

elementui 中el-date-picker 选择年后输出的是Wed Jan 01 2025 00:00:00 GMT+0800 (中国标准时间)

文章目录 问题分析 问题 在使用 el-date-picker 做只选择年份的控制器时&#xff0c;出现如下问题&#xff1a;el-date-picker选择年后输出的是Wed Jan 01 2025 00:00:00 GMT0800 (中国标准时间)&#xff0c;输出了两次如下 分析 在 el-date-picker 中&#xff0c;我们使用…

【51单片机】如何设置中断函数(场景:在定时器工作完跳转到中断程序时,怎么识别我们的中断程序在哪里呢?)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 本章是【利用定时器和中断实现一个简单项目】中的一部分&#xff0c;感兴趣的老铁可以跳转传送门查看传送门 欢迎订阅 YY滴C专栏&#xff01;更多干货…

CI/CD部署

什么是CI&#xff0c;什么是CD CI和CD是软件开发中持续集成和持续交付的缩写。 CI代表持续集成&#xff08;Continuous Integration&#xff09;&#xff0c;是一种实践&#xff0c;旨在通过自动化构建、测试和代码静态分析等过程&#xff0c;频繁地将代码变更合并到共享存储…

前端技巧之svg精灵图svg-sprite-loader

首先说明精灵图的必要性&#xff0c;其可以让我们只需要向服务器请求一次图片资源&#xff0c;就能加载很多图片&#xff0c;即能够减轻http请求造成的服务器压力。 然后这里要说明的是这个插件是webpack上面的&#xff0c;所以在vue2中比较好用&#xff0c;如果在vue3中&…

3DSC特征描述符、对应关系可视化以及ICP配准

一、3DSC特征描述符可视化 C #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pcl/search/kdtree.h> #include <pcl/io/pcd_io.h> #include <pcl/features/normal_3d_omp.h>//使用OMP需要添加的头文件 #include <pcl…

ubuntu制作windows的u盘启动盘

概要&#xff1a; 本篇演示在ubuntu22.04中制作windows10的u盘启动盘 一、下载woeusb 1、下载woeusb 在浏览器中输入https://github.com/woeusb/woeusb/releases访问woeusb 点击红色矩形圈出来的部分&#xff0c;下载woeusb 2、安装wimtools wimtools是woeusb的一个必须的…

windows@按流量计费网络设置@电脑风扇降噪的可能方法

文章目录 按流量计费网络设置流量计费模式下的好处电脑风扇在连结wifi时更容易噪音问题限制软件和系统自动更新行为例:edge不再自动更新 按流量计费网络设置 windows metered connection:Metered connections in Windows - Microsoft Support 打开所连接的网络进行设置,开启me…

项目开发日志(登录界面):2. LoginTitle组件

LoginTitle组件 样式 说明 属性 属性名含义类型是否必填默认值welcomeTitle欢迎标语String是无mainTitle标题String是无 样式 mainColor -> 主题颜色 代码 <template><div class"logintitle-container"><p class"subtitle">{{ welc…

21-k8s中pod的调度-污点和污点容忍

一、污点的概念 所谓的污点&#xff0c;就是给k8s集群中的节点设置的污点&#xff0c;通过设置污点&#xff0c;来规划资源创建时所在的节点&#xff1b; 污点的类型解释说明PreferNoshedule 节点设置这个五点类型后&#xff1b; 表示&#xff0c;该节点接受调度&#xff0c;但…