JavaStream

流:

什么是流:流是一种有序的数据序列,可以进行数据的传送!

根据操作类型可分为:输入流和输出流两种I/O(Input/Output,输入/输出)

根据数据传送类型分为:字节流/字符流

根据功能不同可以分为:节点流和处理流

Java语言定义了许多类专门负责各种方式的输入和输出,这些类都被放在java.io包中。其中所有输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有输出流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。

下面是我的举例:


InputStream:

</pre><pre name="code" class="java"><span style="font-size:18px;">package com.sxt.stream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author HZ
 * @category 字节输入流
 */
public class InputStreamDemoOne {

	public static void main(String[] args) {
		File file = new File("C:/new/mulu/a.txt");
		InputStream input = null;
		try {
			input = new FileInputStream(file);
			int i = 0;
			while((i=input.read())!=-1){
				System.out.print((char)i);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}

}
</span>
OutputStream:
package com.sxt.Stream;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * @author HZ
 * @category 字节输出流
 */
public class OutputStreamDemoOne {

	public static void main(String[] args) {
		File file = new File("C:" + File.separator + "new" 
						+ File.separator + "mulu" + File.separator + "b.txt");
		OutputStream output = null;
		try {
			output = new FileOutputStream(file);
			output.write(71);
			output.write(65);
			output.write(97);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				output.flush();
				output.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}

}
Reader:        
package com.sxt.stream;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

/**
 * @author HZ
 * @category 字符输入流
 */
public class ReaderDemoOne extends SeparatorDemo {

	public static void main(String[] args) {
		File file = new File("C:" + File.separator + "new" + File.separator + "mulu" + File.separator + "b.txt");
		Reader reader = null;
		try {
			reader = new FileReader(file);
			int i;
			while((i=reader.read())!=-1){
//				i = reader.read();
				System.out.print((char)i);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				reader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		
	}

}


Writer:
package com.sxt.stream;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

/**
 * @author HZ
 * @category 字符输出流
 */
public class WriterDemoOne {

	public static void main(String[] args) {
		File file = new File("C:" + File.separator + "new" 
				+ File.separator + "mulu" + File.separator + "c.txt");
		Writer writer = null;
		try {
			writer = new FileWriter(file);
			writer.write("再不奋斗就老了!!!!!!!!!");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				writer.flush();
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}

}

具体运用待续……






### Java Stream API 使用教程:数据处理详解 Java Stream API 是 Java 8 引入的一项重要功能,它为集合类的数据处理提供了一种高效、声明式的编程方式。Stream API 的核心理念是将数据处理流程抽象为流管道(pipeline),通过中间操作和终止操作的链式调用,实现对数据的过滤、映射、排序、归约等复杂逻辑。 #### 创建流 在使用 Stream API 前,首先需要从一个数据源创建流对象。常见的数据源包括集合(如 List、Set)、数组以及 I/O 资源等。 ```java List<String> list = Arrays.asList("apple", "banana", "cherry"); Stream<String> stream = list.stream(); // 获取串行流 Stream<String> parallelStream = list.parallelStream(); // 获取并行流 ``` #### 中间操作 中间操作返回一个新的流对象,并支持链式调用。这些操作不会立即执行,而是延迟到终止操作被调用时才进行实际计算。 - **filter**:用于筛选符合条件的元素。 ```java List<String> filtered = list.stream() .filter(s -> s.startsWith("a")) .collect(Collectors.toList()); ``` - **map**:用于将每个元素映射成另一个值或对象。 ```java List<Integer> lengths = list.stream() .map(String::length) .collect(Collectors.toList()); ``` - **sorted**:用于对流中的元素进行排序。 ```java List<String> sorted = list.stream() .sorted() .collect(Collectors.toList()); ``` - **limit** 和 **skip**:分别用于限制流的大小和跳过指定数量的元素。 ```java List<String> limited = list.stream() .limit(2) .collect(Collectors.toList()); List<String> skipped = list.stream() .skip(1) .collect(Collectors.toList()); ``` #### 终止操作 终止操作会触发流的处理过程并产生结果,通常是一个值、集合或副作用。 - **forEach**:对每个元素执行指定的操作。 ```java list.stream().forEach(System.out::println); ``` - **collect**:将流的结果收集到一个容器中,如 List、Set 或 Map。 ```java List<String> collected = list.stream() .filter(s -> s.length() > 5) .collect(Collectors.toList()); ``` - **reduce**:用于将流中的元素合并成一个单一的结果。 ```java Optional<String> combined = list.stream() .reduce((s1, s2) -> s1 + ", " + s2); ``` - **count**:统计流中元素的数量。 ```java long count = list.stream().count(); ``` - **anyMatch / allMatch / noneMatch**:判断是否有任意、全部或没有元素满足条件。 ```java boolean anyStartsWithA = list.stream().anyMatch(s -> s.startsWith("a")); boolean allStartWithA = list.stream().allMatch(s -> s.startsWith("a")); boolean noneStartWithZ = list.stream().noneMatch(s -> s.startsWith("z")); ``` #### 并行流与性能优化 Stream API 提供了并行流(parallel stream)来利用多核处理器提升处理效率。对于大规模数据集,使用并行流可以显著提高性能。 ```java int sum = numbers.parallelStream() .mapToInt(Integer::intValue) .sum(); ``` 需要注意的是,并行流并不总是优于串行流,具体取决于数据量大小、操作复杂度以及硬件资源等因素。 #### 函数式编程与 Lambda 表达式 Stream API 与函数式编程特性紧密结合,Lambda 表达式简化了代码编写,使代码更具可读性和简洁性[^3]。 ```java List<String> filteredWithLambda = list.stream() .filter(s -> s.contains("a")) .collect(Collectors.toList()); ``` #### 示例:综合应用 以下示例展示如何使用 Stream API 进行数据处理: ```java List<Student> students = getStudents(); // 假设这是一个包含学生信息的列表 // 筛选年龄大于20的学生,按姓名排序,并收集到新的列表中 List<Student> result = students.stream() .filter(s -> s.getAge() > 20) .sorted(Comparator.comparing(Student::getName)) .collect(Collectors.toList()); ``` 通过上述方法,开发者可以以一种更加清晰和模块化的方式组织代码,提高程序的可维护性和可扩展性[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值