java Stream

package study01;

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

import com.sun.imageio.plugins.common.InputStreamAdapter;

/**
 * Stream
 * InputStream:  输入流  从文件中往  当前程序 入      是抽象类,不能直接new,供子类继承
 * OutputStream: 输出流    
 *          接口是一种特殊的抽象类     不能直接new  供实现类实现implements
  *    接口/抽象类
  *    接口的实现类:
  *    抽象类的子类:
 * 
 * @author S
 *
 */
public class StreamTest {
	public static void main(String[] args) {
		
		
		File file = new File("C:/Users/S/Desktop/aaa.txt");
		
		try {
			FileInputStream fileInputStream = new FileInputStream(file);
			fileInputStream.read();
			
			FileReader fileReader = new FileReader(file);
			// readLine
			BufferedReader bufferedReader = new BufferedReader(fileReader);
			String line = bufferedReader.readLine();
			System.out.println(line);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
//		
		catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

抽象类:

package study01;

/**
 *    抽象类
 *    作用:让别人去继承
 *    接口:自己不做事,让具体的实现类做
 *    作用:从整体上提供方法
 * @author S
 *
 */
public abstract class AbstractTest {
	private String name;
	
	public void test() {
		
	}
	
	public abstract void tt();
}

抽象类子类

package study01;

public class AbstractZilei extends AbstractTest{

	@Override
	public void tt() {
		System.out.println("------------");
	}

}

 

### 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、付费专栏及课程。

余额充值