java使用jdk8的Stream来获取list集合的最小值、最大值、总和、平均数
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);
}
}
相关文章
- JAVA Eclipse开发Android程序如何自定义图标
- java实现第三届蓝桥杯源码变换
- Java中List集合去除重复数据的方法
- java 11 标准Java异步HTTP客户端
- Java List集合stream流 distinct() 去重代码示例
- Java 常用数据结构对象的实现原理 集合类 List Set Map 哪些线程安全 (美团面试题目)
- Java java.util.concurrent.Future的一个例子
- 当年的Java考试:JAVA&移动应用&大数据-大三-社区疫苗接种管理系统(全部源码·保姆式呵护)
- 最长公共子序列(JAVA实现)
- 【java】Java中-> 是什么意思?
- 【java】Java教程
- 【java】Java ArrayList
- Java中List的contains方法,你用对了吗?
- java - 集合List remove 报错 ConcurrentModificationException
- Java:String和List互相转换
- java基础之集合List-ArrayList、LinkedList、Vector的差别
- Java的接口和抽象类
- 下载各个版本java (Java Development Kit)
- 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )
- 数据结构 —— 树4种遍历,java代码实现
- List<?> list= new ArrayList<?>接口引用指向实现类的对象.