Java8新特性强大的Stream API终止操作之收集(七)

收集

Collector 接口中方法的实现决定了如何对流执行收集操作(如收 集到 List、Set、Map)。但是 Collectors 实用类提供了很多静态 方法,可以方便地创建常见收集器实例,具体方法与实例如下表:

 

代码 

这里有很多方法,大家可以自己试试,我这里只是写几个演示一下。

package com.csdn.test;

import com.csdn.entity.Employee;
import org.junit.Test;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author summer
 * @date 2022-04-17  9:16
 */
public class TestFinal3 {
    List<Employee> employees = Arrays.asList(
            new Employee("张三",18,6666.66),
            new Employee("李四",38,3333.66),
            new Employee("王五",32,4444.66),
            new Employee("赵六",42,5555.66),
            new Employee("田七",21,9999.66),
            new Employee("王八",19,8888.66),
            new Employee("王八",19,8888.66),
            new Employee("王八",19,8888.66),
            new Employee("张九",52,7777.66)
    );

    @Test
    public void test(){
        //将工资大于8000的放入到一个集合中
        List<Employee> collect = employees.stream().filter(e -> e.getSalary() > 8000).collect(Collectors.toList());
        collect.forEach(System.out::println);
        //将工资大于8000的放入到一个集合中并去除重复数据
        System.out.println();
        Set<Employee> collect1 = employees.stream().filter(e -> e.getSalary() > 8000).collect(Collectors.toSet());
        collect1.forEach(System.out::println);
        System.out.println();
        //上述操作还可以这么做
        HashSet<Employee> collect2 = employees.stream().filter(e -> e.getSalary() > 8000).collect(Collectors.toCollection(HashSet::new));
        collect2.forEach(System.out::println);


        //计算工资大于8000的员工的个数
        Long collect3 = employees.stream().filter(e -> e.getSalary() > 8000).collect(Collectors.counting());
        System.out.println(collect3);

        System.out.println();
        long count = employees.stream().filter(e -> e.getSalary() > 8000).count();
        System.out.println(count);
        System.out.println();
        //对集合中的工资求和
        Double collect4 = employees.stream().collect(Collectors.summingDouble(Employee::getSalary));
        System.out.println(collect4);
        System.out.println();
        //计算工资的平均值
        Double collect5 = employees.stream().collect(Collectors.averagingDouble(Employee::getSalary));
        System.out.println(collect5);
        System.out.println();
        //收集值,并按需获取值
        DoubleSummaryStatistics collect6 = employees.stream().collect(Collectors.summarizingDouble(Employee::getSalary));
        System.out.println(collect6.getSum());
        System.out.println(collect6.getAverage());
        System.out.println();
//        将集合中的名字连接成字符串,并用逗号将其连接
        String collect7 = employees.stream().map(Employee::getName).collect(Collectors.joining(","));
        System.out.println(collect7);

        //查找出工资最大的员工
        Optional<Employee> max = employees.stream().max((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));
        System.out.println(max.get());
        Optional<Employee> collect8 = employees.stream().collect(Collectors.maxBy((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary())));
        System.out.println(collect8.get());
        System.out.println();


        //查询出最低的工资
        Optional<Double> min = employees.stream().map(Employee::getSalary).min(Double::compare);
        System.out.println(min.get());

        Optional<Double> collect9 = employees.stream().map(Employee::getSalary).collect(Collectors.minBy(Double::compareTo));
        System.out.println(collect9.get());
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喜欢编程的夏先生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值