java8 stream Api二

// collect 收集器 对最后的结果经行整理 可以让结果以不同形式呈现
public class StreamDemo2 {


private static List<Persion> list = Arrays.asList(new Persion("11", 52, "男"), new Persion("A", 43, "男"),
new Persion("b", 12, "男"), new Persion("C", 15, "女"), new Persion("11", 22, "女"),
new Persion("11", 32, "女"));
private static Stream<Integer> stream = Arrays.stream(new Integer[] { 1, 2, 3, 4, 5, 6, 7, 8 });


// 归约操作 最后成一个值 最大 最小 平均 等
public static void demo1() {
// 求平均年龄
Double age = list.stream().collect(Collectors.averagingInt(Persion::getAge));
// 最大年龄的人
Optional<Persion> collect = list.stream().collect(Collectors.maxBy(Comparator.comparingInt(Persion::getAge)));
// summarizingInt 一次统计出各种值 可以通过IntSummaryStatistics get 各种想要的值
IntSummaryStatistics collect2 = list.stream().collect(Collectors.summarizingInt(Persion::getAge));
collect2.getAverage();
collect2.getCount();
collect2.getMax();
collect2.getMin();
collect2.getSum();


}


// 可用于计算的 函数 Collects.reducing函数 用这个函数计算更高效
public static void demo2() {
/**
* 接受三个参数 第一个参数初始值 第二个参数 归约操作的字段
* 第三个表示归约的过程。这个参数接收一个Lambda表达式,而且这个Lambda表达式一定拥有两个参数,
* 分别表示当前相邻的两个元素。由于我们需要累加。
*/
Integer collect = list.stream().collect(Collectors.reducing(0, Persion::getAge, (i, j) -> i + j));


/**
* 接受两个参数 第一个计算的初始值 第二个计算的逻辑
*/
// 给定初始值 偶数累计相乘 1*2*4*6*8
// Integer reduce = stream.filter(i -> i % 2 == 0).reduce(1, (i, j) -> i
// * j);


/**
* 只接受一个参数 就是第三个参数 前两个为默认值
*/
// 最大 流只能操作一次不能
// stream.reduce(Integer::max).ifPresent(System.out::println);
// 最小
// stream.reduce(Integer::min).ifPresent(System.out::println);
// 求和
// stream.reduce((x, y) -> x + y).ifPresent(System.out::println);


// 给定初始值 偶数累计相乘 100*2*4*6*8
Integer reduce = stream.filter(i -> i % 2 == 0).reduce(100, (i, j) -> i * j);


System.out.println(reduce);
}


public static void main(String[] args) {
demo3();
}


// 分组操作
public static void demo3() {
// 安性别分组
list.stream().collect(Collectors.groupingBy(Persion::getSex));


// 所有男人安年龄分组
Map<String, List<Persion>> map = list.stream().filter(t -> t.getSex().equals("男"))
.collect(Collectors.groupingBy((p) -> {
if (p.getAge() > 60)
return "老年人";
else if (p.getAge() > 40)
return "中年人";
else
return "青年人";
}));
// 多级分组 外层年龄 内层性别
Map<String, Map<String, List<Persion>>> map2 = list.stream().collect(Collectors.groupingBy((person) -> {
if (person.getAge() > 60)
return "老年";
if (person.getAge() > 40)
return "中年";
else
return "青年";
}, Collectors.groupingBy(Persion::getSex)));


}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值