java中的聚合的例子_JAVA-聚合操作(3个程序掌握)

本文通过实战案例介绍Java Stream API的使用方法,包括过滤、去重、排序等中间操作及遍历、转换、求最值等结束操作。并对比了传统集合操作与Stream API的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Stream是一系列元素。

聚合操作分为三步:

1.创建一个Stream

2.中间操作

fliter/distinct/sorted/limit/skip

3.结束操作

forEach/toArray/min/max/count/findFirst

中间操作程序例子:

package 聚合操作;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import 匿名方法.Hero;

public class TestAggregate2 {

public static void main(String[] args) {

List heros = new ArrayList<>();

Random r = new Random();

for(int i=0;i<5;i++){

heros.add(new Hero("hero"+i,r.nextInt(1000),r.nextInt(100)));

}

heros.add(heros.get(0));

System.out.println("初始化后的数据:");

System.out.println(heros);

//1.filter

System.out.println("满足条件hp>100&&damage<50的数据");

heros

.stream()

.filter(h->h.hp>100&&h.damage<50)

.forEach(h->System.out.println("name  :"+h.name+"  hp:"+h.hp+"  damage:"+h.damage));

//2.distinct 去除重复

System.out.println("去除重复的数据,去除标准是看equals");

heros

.stream()

.distinct()

.forEach(h->System.out.println(h));

//3.sorted

System.out.println("按照血量排序");

heros

.stream()

.sorted((h1,h2)->h1.hp>=h2.hp?1:-1)

.forEach(h->System.out.println(h));

//4.limit 保留

System.out.println("保留3个");

heros

.stream()

.limit(3)

.forEach(h->System.out.println(h));

//5.skip 忽略前3个

System.out.println("忽略前3个");

heros

.stream()

.skip(3)

.forEach(h->System.out.println(h));

//6.转换

System.out.println("转换为double的Stream");

heros

.stream()

.mapToDouble(Hero::getHp)

.forEach(h->System.out.println(h));

//7.

System.out.println("转换任意类型的Stream");

heros

.stream()

.map(h->h.name+" "+h.hp+" "+h.damage)

.forEach(h->System.out.println(h));

}

}

结束操作程序例子:

package 聚合操作;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.Random;

import 匿名方法.Hero;

public class TestAggregate3 {

public static void main(String[] args) {

List heros = new ArrayList<>();

Random r = new Random();

for(int i=0;i<5;i++){

heros.add(new Hero("hero"+i,r.nextInt(1000),r.nextInt(100)));

}

System.out.println("初始化后的数据:");

System.out.println(heros);

System.out.println("遍历集合中的每个数据");

heros

.stream()

.forEach(h->System.out.println(h));

System.out.println("返回一个数组");

Object[] hs = heros

.stream()

.toArray();

System.out.println(Arrays.toString(hs));

System.out.println("返回伤害最低的那个英雄");

Hero Damagaminhero=

heros

.stream()

.min((h1,h2)->h1.damage-h2.damage)

.get();

System.out.println(Damagaminhero);

System.out.println("返回伤害最高的那个英雄");

Hero DamageMaxHero =

heros

.stream()

.max((h1,h2)->h1.damage-h2.damage)

.get();

System.out.println(DamageMaxHero);

System.out.println("流中数据的总数");

long count = heros

.stream()

.count();

System.out.println(count);

System.out.println("第一个英雄");

Hero firstHero =

heros

.stream()

.findFirst()

.get();

System.out.println(firstHero);

}

}

综合应用的简单示例:

package 聚合操作;

//首选准备10个Hero对象,hp和damage都是随机数。

//分别用传统方式和聚合操作的方式,把hp第三高的英雄名称打印出来

import java.util.*;

import 匿名方法.Hero;

public class TestAggregate4 {

public static void main(String[] args) {

Random r = new Random();

List heros = new ArrayList<>();

for(int i=0;i<10;i++){

heros.add(new Hero("hero"+i,r.nextInt(1000),r.nextInt(100)));

}

System.out.println(heros);

//1.传统方式,比较器

Comparator c = new Comparator(){

public int compare(Hero h1,Hero h2){

return h1.hp>=h2.hp?-1:1;

}

};

Collections.sort(heros,c);

System.out.println(heros.get(2));

//2.聚合方式

//        Hero hs1 = heros

//        .stream()

//        .sorted((h1,h2)->h1.hp>=h2.hp?-1:1)  //由大到小排序

//        .skip(2)

//        .findFirst()

//        .get();

//        System.out.println(hs1);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值