Java基础之JDK8之Stream接口

本文深入探讨了JDK1.8中引入的Stream API,详细讲解了Stream的基本概念及其与传统Iterator的区别。文章通过实例演示了Stream的各种操作,包括过滤、去重、映射、聚合等,展示了其在函数式编程中的强大能力。

JDK1.8新特性之Stream
什么是Stream?

Stream是元素的集合,这点让Stream看起来用些类似Iterator;
可以支持顺序和并行的对原Stream进行汇聚的操作;

我们可以把Stream当成一个高级版本的Iterator。
原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作;
高级版本的Stream,用户只要给出需要对其包含的元素执行什么操作,
比如“过滤掉长度大于10的字符串”、“获取每个字符串的首字母”等,
具体这些操作如何应用到每个元素上,就给Stream就好了!

Stream的常见操作有:
在这里插入图片描述
更多方法请看API文档 这里只有很少一部分方法


两句话都能打印出来stream存的东西
在这里插入图片描述
在这里插入图片描述
foreach是返回结果直接打印 是结束操作


filter返回的是Stream类型的 是中间操作 惰式执行操作 filter返回的是流 所以交给foreach返回结果 打印出来
寻找长度大于3的单词
在这里插入图片描述


distinct
去除重复元素在这里插入图片描述


map映射
在这里插入图片描述
变成大写
在这里插入图片描述


flatMap
把两个流放到一个流里
在这里插入图片描述
这句话的意思是 把两个集合转换成两个Stream流
在这里插入图片描述
把两个集合映射到一起
在这里插入图片描述


reduce 求聚合的操作都是用reduce
找出长度最大的那个单词
在这里插入图片描述


collect 配合Collector这个工具类 根据流 生成不同的集合
以List方式进行输出
在这里插入图片描述


两个冒号的方法
//:: 方法引用
//引用静态方法 Integer::valueOf
//引用对象的方法 list::add
//引用构造方法 ArrayList::new


package com.vince;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Stream接口:不是存储数据结构,数据源可以是一个集合,为了函数式编程创造 ,
 * 惰式执行,数据只能被消费一次
 * 
 * 两种类型的操作方法:
 * 1、中间操作(生成一个Stream)
 * 2、结束操作(执行计算操作)
 * @author vince
 * @description
 */
public class StreamDemo {

	public static void main(String[] args) {
		
		
		Stream<String> stream = Stream.of("good","good","study","day","day","up");
		//foreach方法
		//stream.forEach((str)->System.out.println(str));
		//stream.forEach(System.out::println);
		
		//filter
		//stream.filter((s)->s.length()>3).forEach(System.out::println);
		
		//distinct
		//stream.distinct().forEach(s->System.out.println(s));
		
		//map
		//stream.map(s->s.toUpperCase()).forEach(s->System.out.println(s));
		
		//flatMap
//		Stream<List<Integer>> ss = Stream.of(Arrays.asList(1,2,3),Arrays.asList(4,5));
//		ss.flatMap(list->list.stream()).forEach(System.out::println);
		
		//reduce
		
//		Optional<String> opt = stream.reduce((s1,s2)->s1.length()>=s2.length()?s1:s2);
//		System.out.println(opt.get());
		
		//collect
		List<String> list = stream.collect(Collectors.toList());
		list.forEach(s->System.out.println(s));
		
		//:: 方法引用
		//引用静态方法     	Integer::valueOf
		//引用对象的方法  	list::add
		//引用构造方法		ArrayList::new
		
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值