stream流的介绍

什么是Stream

流(Stream)是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。集合讲的是数据,流讲的是计算。

1.Stream自己不会存储元素。
2.Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。
3.Stream操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

创建流的方式

  1. 通过Collection系列集合提供的stream()或parallelStream()
		List<String> list = new ArrayList<>();
		Stream<String> stream1 = list.stream();
  1. 通过Arrays中的静态方法sream()获取数组流
		String[] strArray=new String[10];
		Stream<String> stream2 = Arrays.stream(strArray);
  1. 通过Stream类的静态方法of()
		Stream<String> stream3 = Stream.of("西部","北京","南昌","成都","重庆");
  1. 创建无限流 -> 迭代
		Stream<Integer> stream4 = Stream.iterate(0, (i)->i+10);
		stream4.limit(10).forEach(System.out::println);

在这里插入图片描述

  1. 创建无限流 -> 生成
		Stream.generate(()->Math.round(Math.random()*50))
					  .filter((i)->i>25)
					  .limit(5)
					  .forEach(System.out::println);

在这里插入图片描述


中间操作

中间操作不会有任何结果,比如中间操作后再终止操作foreach()方法后就会有结果。
多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理。而在终止操作时一次性全部处理,称为“惰性求值”。

筛选与切片

在这里插入图片描述

筛选与切片
filter: 接收Lambda,从流中排除某些元素
limit: 截断流,使某元素不超过给定数量
skip(n): 跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流。与limit(n)互补
distinct: 筛选,通过流所生成元素的hashCode()和equals()去除重复元素
	List<Person> list = Arrays.asList(
			new Person("小孩",100),
			new Person("hon",320),
			new Person("xs",30),
			new Person("测试孩",0),
			new Person("下下周",50),
			new Person("成功vs",60));
	
	@Test
	public void t24() {
		list.stream()
		             .filter((i)->i.getAge()>50)
		             .forEach(System.out::println);
					  
	}

在这里插入图片描述

映射与排序

映射
map: 接收Lambda,将元素转换成其他形式或提取信息。接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
flatMap: 接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。
排序
sorted(): 自然排序
sorted(Comparator com): 定制排序

自然排序:

	@Test
	public void t24() {
		List<Integer> a = Arrays.asList(1,4,32,654,432,67,856,543,756,2245);
		a.stream()
				  .sorted()
				  .forEach(System.out::println);
	}

在这里插入图片描述

定制排序:

	@Test
	public void t24() {
		List<Integer> a = Arrays.asList(1,4,32,654,432,67,856,543,756,2245);
		a.stream()
				  .sorted((o1,o2)->{
					  return o1>o2?-1:o1<o2?1:0;
				  })
				  .forEach(System.out::println);
	}

在这里插入图片描述

	List<Person> list = Arrays.asList(
			new Person("小孩",100),
			new Person("hon",320),
			new Person("xs",30),
			new Person("as",30),
			new Person("下下周",50),
			new Person("成功vs",60));
	
	@Test
	public void t24() {
		list.stream()
		             .sorted((o1,o2)->{
		            	if(o1.getAge()==o2.getAge()) {
		            		return o1.getName().compareTo(o2.getName());
		            	}else {
		            		return o1.getAge().compareTo(o2.getAge());
		            	}
		             }).forEach(System.out::println);
					  
	}

在这里插入图片描述


终止操作

查找与匹配
allMatch: 检查是否匹配所有元素
anyMatch: 检查是否至少匹配一个元素
noneMatch: 检查是否没有匹配所有元素
findFirst: 返回第一个元素
findAny: 返回当前流中的任意元素
count: 返回流中元素的总个数
max: 返回流中最大值
min: 返回流中最小值
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brrby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值