zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java使用jdk8的Stream来获取list集合的最小值、最大值、总和、平均数

JAVAList集合 获取 stream 最大值 最小值 总和
2023-09-11 14:20:19 时间

java使用jdk8的Stream来获取list集合的最小值、最大值、总和、平均数

User 实体类

package com.example.listdemo.entity;

import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * @author qzz
 */
@Data
public class User {

    /**
     * id
     */
    private Integer id;
    /**
     * 姓名
     */
    private String name;
    /**
     * 工号
     */
    private String jobNumber;
    /**
     * 年龄
     */
    private Integer age;
    /**
     * true:男 false:女
     */
    private Boolean  gender;
    /**
     * 身高
     */
    private Double  height;
    /**
     * 出生日期
     */
    private LocalDate birthday;
    /**
     * 成员数量
     */
    private BigDecimal familyMemberQuantity;

    public User(String name, String jobNumber, Integer age, Boolean gender, Double height, LocalDate birthday){
        this.name = name;
        this.jobNumber = jobNumber;
        this.gender = gender;
        this.age = age;
        this.height = height;
        this.birthday = birthday;
    }
    public User(String name,Integer age,BigDecimal familyMemberQuantity){
        this.name = name;
        this.age = age;
        this.familyMemberQuantity = familyMemberQuantity;
    }
    /**
     * 输出打印信息
     * @param list
     */
    public static void printUsers(List<User> list){
        System.out.println("[姓名]\t\t[工号]\t\t[性别]\t\t[年龄]\t\t[身高]\t\t[生日]");
        System.out.println("-----------------------------------------------------------------------");
        list.forEach(u-> System.out.println(printValue(u)));
        System.out.println(" ");
    }

    /***
     * 输出list结果集
     * @param user
     * @return
     */
    public static String printValue(User user){
        String str=String.format("%s\t\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t%s",
                user.name,user.jobNumber,user.gender.toString(),user.age.toString(),
                user.height.toString(),user.birthday.toString());
        return str;
    }
}

一、获取list集合的最小值、最大值

package com.example.listdemo.utils;

import com.example.listdemo.entity.User;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * List集合最值:使用jdk8的Stream来获取list集合的最小值、最大值、总和、平均数
 * @author qzz
 */
public class ListMaxMin {

    public static void main(String[] args) {
        //构建测试数据
        List<User> list = new ArrayList<User>();
        list.add(new User("张丹",11,new BigDecimal(11)));
        list.add(new User("刘大",13,new BigDecimal(13)));
        list.add(new User("飒飒",16,new BigDecimal(16)));
        list.add(new User("斯蒂芬",11,new BigDecimal(11)));

        //获取用户年龄的最大、最小、总和、平均值
        int max = list.stream().mapToInt(u->u.getAge()).max().getAsInt();
        int min = list.stream().mapToInt(u->u.getAge()).min().getAsInt();

        System.out.println("年龄最大值:"+max+"\n年龄最小值:"+min);
    }
}

运行结果:
在这里插入图片描述

二、获取list集合的总和、平均数

package com.example.listdemo.utils;

import com.example.listdemo.entity.User;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * List集合最值:使用jdk8的Stream来获取list集合的最小值、最大值、总和、平均数
 * @author qzz
 */
public class ListMaxMin {

    public static void main(String[] args) {
        //构建测试数据
        List<User> list = new ArrayList<User>();
        list.add(new User("张丹",11,new BigDecimal(11)));
        list.add(new User("刘大",13,new BigDecimal(13)));
        list.add(new User("飒飒",16,new BigDecimal(16)));
        list.add(new User("斯蒂芬",11,new BigDecimal(11)));

        //获取用户年龄的最大、最小、总和、平均值
        //求和
        //求和:分基本类型和大数据类型,基本类型先mapToInt方法,然后调用sun方法;大数类型使用reduce调用BigDecimal::add方法
        //基本类型求和
        int sum = list.stream().mapToInt(u->u.getAge()).sum();
        //BigDecimal求和
        BigDecimal totalQuantity = list.stream().map(u->u.getFamilyMemberQuantity()).reduce(BigDecimal.ZERO,BigDecimal::add);

        double avg = list.stream().mapToInt(u->u.getAge()).average().getAsDouble();

        System.out.println("年龄总和:"+sum+"\n年龄平均值:"+avg);
        System.out.println("成员数量总和:"+totalQuantity);
    }
}

运行结果:
在这里插入图片描述

三、示例完整代码

package com.example.listdemo.utils;

import com.example.listdemo.entity.User;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * List集合最值:使用jdk8的Stream来获取list集合的最小值、最大值、总和、平均数
 * @author qzz
 */
public class ListMaxMin {

    public static void main(String[] args) {
        //构建测试数据
        List<User> list = new ArrayList<User>();
        list.add(new User("张丹",11,new BigDecimal(11)));
        list.add(new User("刘大",13,new BigDecimal(13)));
        list.add(new User("飒飒",16,new BigDecimal(16)));
        list.add(new User("斯蒂芬",11,new BigDecimal(11)));

        //获取用户年龄的最大、最小、总和、平均值
        int max = list.stream().mapToInt(u->u.getAge()).max().getAsInt();
        int min = list.stream().mapToInt(u->u.getAge()).min().getAsInt();
        //求和
        //求和:分基本类型和大数据类型,基本类型先mapToInt方法,然后调用sun方法;大数类型使用reduce调用BigDecimal::add方法
        //基本类型求和
        int sum = list.stream().mapToInt(u->u.getAge()).sum();
        //BigDecimal求和
        BigDecimal totalQuantity = list.stream().map(u->u.getFamilyMemberQuantity()).reduce(BigDecimal.ZERO,BigDecimal::add);

        double avg = list.stream().mapToInt(u->u.getAge()).average().getAsDouble();

        System.out.println("年龄最大值:"+max+"\n年龄最小值:"+min);
        System.out.println("年龄总和:"+sum+"\n年龄平均值:"+avg);
        System.out.println("成员数量总和:"+totalQuantity);
    }
}