Java学习day13

news2025/1/29 13:53:09

流(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.coloradmin.cn/o/1454116.html

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

相关文章

MySQL事务的概念

一、事务定义 事务&#xff1a;事务是一个最小的不可在分的工作单元&#xff1b;通常一个事务对应一个完整的业务(例如银行账户转账业务&#xff0c;该业务是一个最小的工作单元)一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。事务只和DML语句有关&a…

新款条码扫描数据采集终端 仓库盘点机 快递手持机 PDA手持终端

而随着技术的不断进步&#xff0c;数据采集终端也在不断地升级和优化。新款条码扫描数据采集终端、仓库盘点机PDA手持终端等高性能智能数据采集终端&#xff0c;正是在这样的背景下应运而生。 这些高性能智能数据采集终端&#xff0c;采用了最先进的技术和设计&#xff0c;具有…

计算机设计大赛 深度学习中文汉字识别

文章目录 0 前言1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习中文汉字识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xf…

14. Longest Common Prefix(最长公共前缀)

问题描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 问题分析 方法一&#xff1a;我们可以假设一个字符串是最长的公共子串&#xff0c;然后去验证&#xff0c;如果此串被验证了&#xff0c;再增加一位字符进行验…

SpringBoot2——工程创建、启动原理分析、配置文件、集成框架

一、SpringBoot简介 1.1 Spring Boot概述 Spring Boot 是所有基于 Spring Framework 5.0 开发的项目。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序&#xff0c;并且尽可能减少你的配置文件。 设计目的&#xff1a; 用来简化 Spring 应用的初始搭建以及开…

Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

STM32F1 - 系统时钟SysTick

SysTick 1> SysTick硬件框图2> SysTick的时钟源3> 1ms定时_中断方式4> 思考&#xff1a;无符号数 0 - 255 ?相关资料 1> SysTick硬件框图 SysTick属于Cotex-M3&#xff0c;是CPU外设&#xff1b; SysTick: 位宽24bit&#xff0c; 递减计数&#xff0c;自动重装…

Debezium发布历史136

原文地址&#xff1a; https://debezium.io/blog/2023/01/06/change-data-capture-with-questdb-and-debezium/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Change Data Capture with QuestDB and Debezium …

UE5中的DataTable说明

创建DataTable 在编辑器中创建 在文件夹空白处右击&#xff0c;选择Miscellaneous/DataTable&#xff0c;如图&#xff1a; 使用代码创建 // 创建DataTable实例 UDataTable* MyDataTable NewObject(); // 创建一个行结构体 UStruct* RowStruct UStruct::CreateEmpty(); // 添…

UE蓝图 Set节点和源码

文章目录 Set节点说明相关源码 Set节点说明 UE蓝图中的Set节点是用于对变量进行赋值操作的重要组件。它具有多种功能和作用&#xff0c;具体如下&#xff1a; 变量赋值&#xff1a;Set节点可以用于设置不同类型的变量值&#xff0c;包括整数、浮点数、布尔值、字符串等。在游戏…

c++开发基础之保障多线程编程中的原子操作InterlockedIncrement和InterlockedDecrement用法详解

一、介绍 在多线程编程中&#xff0c;确保对共享变量进行原子操作是至关重要的。当多个线程同时访问和修改同一共享资源时&#xff0c;如果没有合适的同步机制&#xff0c;可能会导致数据竞争、内存一致性问题&#xff0c;甚至造成程序崩溃。为了解决这个问题&#xff0c;C提供…

【退役之重学前端】JavaScript 类、构造器、原型的关系

ES6中类的概念&#xff0c;我之前花了较长的时间学习Java&#xff0c;所以对类感觉很亲切。我并不满足仅仅会使用&#xff0c;让我们一起深究一下 JavaScript 中的类吧。 构造一个类&#xff0c;并实例化一个对象 class Animal{constructor(name){this.name name;}getName(){…

中国传媒网CEO徐晓艺:媒体融合发展业态新媒体年后在沪召开

近日,在“坚守媒体初心,拥抱AI时代”2023外滩新媒体年会上,有多项合作达成。 在当前竞争激烈的市场环境中,媒体宣传已经成为企业品牌推广不可或缺的一环。对于很多企业来说往往会犯一个错误,就是默默地参加了展会,并没有进行媒体营销。展会是一种非常有力的宣传和推广方式,可以…

Vue中 如何监听键盘事件中的按键

在Web前端开发中&#xff0c;键盘事件的处理是非常常见的需求之一。而在Vue框架中&#xff0c;如何监听键盘事件中的按键是一个相对简单但又很实用的功能。本文将为你介绍如何在Vue中监听键盘事件&#xff0c;并演示一些常用的按键操作。 首先&#xff0c;在Vue中监听键盘事件…

数学建模【线性规划】

一、线性规划简介 线性规划通俗讲就是“有限的资源中获取最大的收益”&#xff08;优化类问题&#xff09;。而且所有的变量关系式都是线性的&#xff0c;不存在x、指数函数、对数函数、反比例函数、三角函数等。此模型要优化的就是在一组线性约束条件下&#xff0c;求线性目标…

2024年全国教资笔试报名流程(建议电脑报名),看看有啥新要求?

一.报名、考试时间节点 1.笔试报名时间: 2024年1月12日-15日 2.笔试考试时间:2024年3月9日 3.笔试成绩查询时间:2024年4月15日 4.面试报名时间:2024年4月15日 5.面试考试时间:2024年5月18日 6.面试成绩查询时间:2024年6月14日 二.笔试报名流程: 登陆→考生注册 →填报个…

ArcGIS学习(八)基于GIS平台的控规编制办法

ArcGIS学习(八)基于GIS平台的控规编制办法 上一任务我们学习了”如何进行图片数据的矢量化?" 这一关我们来学习一个比较简单的案例一一”如何在ArcGIS中录入控规指标,绘制控规图纸?" 首先,先来看看这个案例的分析思路以及导入CAD格式的控规图纸。 接着,来看…

LeetCode周赛384 题解

AK 第 384 场周赛 - 力扣&#xff08;LeetCode&#xff09; 前两题都是签到, 略。 第三题: 回文字符串的最大数量 1、题意: 给定一个字符串数组&#xff0c;总字符数量不超过1e6, 可以交换其中的任意两个字符&#xff0c;问能构造最多几个回文字符串。 2、题解: 首先我…

中科大计网学习记录笔记(十二):TCP 套接字编程

前前言&#xff1a;大家看到这一章节的时候一定不要跳过&#xff0c;虽然标题是编程&#xff0c;但实际上是对 socket 的运行机制做了详细的讨论&#xff0c;对理解 TCP 有很大的帮助&#xff1b;但是由于本节涉及到了大量的编程知识&#xff0c;对于一些朋友来说不是很好理解&…

阿里云香港服务器cn2速度测试和租用价格表

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…