Java基础知识复习(十四)-- 集合的聚合操作

Stream和管道的概念

要了解聚合操作,首先要建立Stream和管道的概念,Stream 和Collection结构化的数据不一样,Stream是一系列的元素,就像是生产线上的罐头一样,一串串的出来。管道指的是一系列的聚合操作。

管道又分3个部分

管道源:源是一个List

中间操作: 每个中间操作,又会返回一个Stream,比如.filter()又返回一个Stream,
中间操作是“懒”操作,并不会真正进行遍历。

管道源

把Collection切换成管道源很简单,调用stream()就行了。

中间操作主要分两类

1)对元素进行筛选:

  1. filter 匹配
  2. distinct 去除重复(根据equals判断)distinct 去除重复(根据equals判断)
  3. sorted 自然排序sorted 自然排序
  4. sorted(Comparator) 指定排序sorted(Comparator) 指定排序
  5. limit 保留limit 保留
  6. skip 忽略skip 忽略

2)转换为其他形式的流

  1. mapToDouble 转换为double的流
  2. map 转换为任意类型的流map 转换为任意类型的流.

结束操作

结束操作:当这个操作执行后,流就被使用“光”了,无法再被操作。所以这必定是流的最后一个操作。
结束操作不会返回Stream,但是会返回int、float、String、 Collection或者像forEach,什么都不返回,
结束操作才进行真正的遍历行为,在遍历的时候,才会去进行中间操作的相关判断
常见结束操作如下:

  1. forEach() 遍历每个元素
  2. toArray() 转换为数组
  3. min(Comparator) 取最小的元素
  4. max(Comparator) 取最大的元素
  5. count() 总数
  6. findFirst() 第一个元素

注: 这个Stream和I/O章节的InputStream,OutputStream是不一样的概念。

测试代码(中间操作)

Hero.java

package stack;

public class Hero {
   
	private String name;
	private float hp;
	
	public String getName() {
   
		return name;
	}

	public void setName(String name) {
   
		this.name = name;
	}

	public Hero(String name, float hp) {
   
		super();
		this.name = name;
		this.hp = hp;
	}

	public float getHp() {
   
		return hp;
	}

	public void setHp(float hp) {
   
		this.hp = hp;
	}

	@Override
	public String toString() {
   
		return "[name=" + name + ", hp=" + hp + "]";
	}
	
	
}

package review5;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import stack.Hero;

public class TestAggregate {
   
	public static void main(String[] args) {
   
		  Random r = new Random();
	        List<Hero> heros = new ArrayList<Hero>();
	        for (int i = 0; i < 5; i++) {
   
	            heros.add(new Hero("hero " + i, r.nextInt(1000)));
	        }
	        //制造一个重复数据
	        heros.add(heros.get
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值