java8的Stream API入门笔记

Stream流 API是java8版本中新增的特性,它为数据处理提供了像SQL一样的操作流程,对于数据的处理起到了很好的优化作用。

一、Stream入门介绍
1.流与集合有以下几种不同

  1. 没有存储。 流不是存储元素的数据结构; 相反,它通过计算操作的流水线传送诸如数据结构,阵列,生成器功能或I / O通道的源的元件。
  2. 功能性质。 流上的操作产生结果,但不会修改其来源。 例如,过滤从Stream获得的Stream会生成新的Stream而不需要过滤的元素,而不是从源集合中删除元素。
  3. 懒惰寻求。 许多流操作(如过滤,映射或重复删除)可以懒惰地实现,从而暴露优化的机会。 例如,“找到具有三个连续元音的第一个String ”不需要检查所有的输入字符串。 流操作分为中间( Stream生产)操作和终端(价值或副作用生成)操作。 中级操作总是懒惰。
  4. 可能无限。 虽然集合的大小有限,但流不需要。 诸如limit(n)或findFirst()之类的limit(n) findFirst()可以允许无限流上的计算在有限的时间内完成。
    消耗品 流的元素只能在流的一生中访问一次。 像Iterator一样 ,必须生成一个新流来重新访问源的相同元素。
    2.流可以通过多种方式获得
  5. 从Collection通过stream()和parallelStream()方法;
  6. 从阵列通过Arrays.stream(Object[]) ;
  7. 从上流类静态工厂的方法,如Stream.of(Object[]) , IntStream.range(int, int)或Stream.iterate(Object, UnaryOperator) ;
  8. 文件的行可以从BufferedReader.lines()获取 ;
  9. 文件路径的流可以从Files中的方法获得;
  10. 随机数流可以从Random.ints()获得;
    二.实战总结
package com.cn.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

import com.cn.bean.UserInfo;

/**
 * java8 新API stream 流
 * 
 * 流的使用
 * 1. 创建流(List、Arrays)  2. 中间操作(filter、map、distinct(去重)、sorted(排序))  3.结束操作(forEach)
 * 特性:
 * 1. stream 有‘惰性求值’机制,在没有结束操作时中间操作是不会执行的
 * 2. 使用stream流的时候,对操作的源数据是没有影响的
 * 3. 集合List生成流 List对象.stream  数组生成流 Arrays.stream(数组对象)
 */

public class StreamAPITest {
    
    
	/**
	 * 创建用户数据列表
	 * @return
	 */
	private static List<UserInfo> createUser() {
    
    
//		List<UserInfo> userInfos = new ArrayList<UserInfo>();
//		userInfos.add(new UserInfo("1001","wang",10));
//		userInfos.add(new UserInfo("1002","wang2",11));
//		userInfos.add(new UserInfo("1003","wang3",12));
//		userInfos.add(new UserInfo("1004","wang4",13));
//		userInfos.add(new UserInfo("1005","wang5",14));
		List<UserInfo> userInfos = Arrays.asList(
				new UserInfo("1001","wang",10),
				new UserInfo("1001","wang",10),
				new UserInfo("1004","wang4",13),
				new UserInfo("1004","wang4",13),
				new UserInfo("1004","wang4",13),
				new UserInfo("1004","wang4",13));
		return userInfos;
	}
	
	public static void main(String[] args) {
    
    
		/**
		 * 1. 创建 2. 过滤  3.结束操作 
		 */
		List<UserInfo> userInfos = createUser();
//		userInfos.stream()
//				.filter((e) -> e.getUserAge() >= 12)
//				.forEach(System.out::println);
//	
	/**
	 * 1. 创建 2. 映射  3.结束操作 
	 */
 		Integer[] integers = new Integer[] {
    
    1,2,3,4};
//		Arrays.stream(integers)
//				.map((x) -> x*x)
//				.forEach(System.out:: println);	
	/**
	 * reduce 求值
	 */
//		Optional<Integer> countOptional =  userInfos.stream()
//				.map((e) -> 1)
//				.reduce(Integer :: sum);
//		System.out.println(countOptional.get());
	/**
	 * 去重  (年龄去重)
	 */
 		userInfos.stream()
 					.map((t) -> t.getUserAge())
 					.distinct()
 					.forEach(System.out::println);
		
		
	}
}

猜你喜欢

转载自blog.csdn.net/Wangdiankun/article/details/109582438