Java Stream(求和,过滤,排序)

前言

利用Java8 新特性 Stream进行求和、过滤、排序。


提示:以下是本篇文章正文内容,下面案例可供参考

1.创建实体类

代码如下(示例):

@Data
public class Employee implements Serializable {

    private static final long serialVersionUID = -9079722457749166858L;

    /**
     * 名字
     */
    private String name;

    /**
     * 年龄
     */
    private Integer age;
    /**
     * 薪水
     */
    private Double salary;

    /**
     * 部门号
     */
    private Integer deptNo;

}

2.创建测试类开始测试

代码如下(示例):

public class Test {

    public static void main(String[] args) {
        Employee employee1 = new Employee();
        employee1.setName("一号");
        employee1.setAge(10);
        employee1.setSalary(100.00);
        employee1.setDeptNo(1);
        Employee employee2 = new Employee();
        employee2.setName("二号");
        employee2.setAge(20);
        employee2.setSalary(1000.00);
        employee2.setDeptNo(1);
        Employee employee3 = new Employee();
        employee3.setName("三号");
        employee3.setAge(30);
        employee3.setSalary(300.00);
        employee3.setDeptNo(2);
        Employee employee4 = new Employee();
        employee4.setName("四号");
        employee4.setAge(40);
        employee4.setSalary(400.00);
        employee4.setDeptNo(1);
        List<Employee> employees = new ArrayList<>();
        employees.add(employee1);
        employees.add(employee2);
        employees.add(employee3);
        employees.add(employee4);

        //求获取List对象中某个字段的集合
        List<String> names = employees.stream().map(employee -> employee.getName()).collect(Collectors.toList());

        //求和
        Integer ageSum = employees.stream().mapToInt(e -> e.getAge()).sum();
        Double totalSalary = employees.stream().mapToDouble(employee -> employee.getSalary()).sum();

        //过滤:获取薪水大于200的,过滤掉不符合条件的
        List<Employee> filterEmp = employees.stream().filter(employee -> employee.getSalary() > 200).collect(Collectors.toList());

        //升序:按照薪水升序
        List<Employee> ascEmp = employees.stream().sorted(Comparator.comparing(Employee::getSalary)).collect(Collectors.toList());
        //降序:按照薪水降序
        List<Employee> descEmp = employees.stream().sorted(Comparator.comparing(Employee::getSalary).reversed()).collect(Collectors.toList());

        //分类:按员工所属部门号进行分类
        Map<Integer, List<Employee>> map = employees.stream().collect(Collectors.groupingBy(employee -> employee.getDeptNo()));
        for (Map.Entry<Integer, List<Employee>> entry : map.entrySet()) {
            System.out.println("key: " + entry.getKey() + "  value:" + entry.getValue());
        }

        //获取1号部门员工姓名,按薪水从高到低排序
        List<String> nameList = employees.stream().filter(employee -> employee.getDeptNo().equals(1)).sorted(Comparator.comparing(Employee::getSalary)
                .reversed()).map(employee -> employee.getName()).collect(Collectors.toList());
        nameList.stream().forEach(System.out::println);
    }

总结

使用java8中的Steam可以减少代码量,使代码阅读更急清晰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值