Java8 List统计(最大值,最小值、平均值、总和)
核心功能代码:
Integer sum = list.stream().mapToInt(User::getAge).sum();
System.out.println("年龄总和:" +sum);
Integer max = list.stream().mapToInt(User::getAge).max().orElse(0);
System.out.println("年龄 最大:" + max);
Integer min = list.stream().mapToInt(User::getAge).min().orElse(0);
System.out.println("年龄 最小:" + min);
Double average = list.stream().mapToInt(User::getAge).average().orElse(0l);
System.out.println("年龄 平均:" + df.format(average));
Java8 Stream除了支持Int类型,还支持double 类型和long类型
学生年龄实例:
package com.digipower.test;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class ListTest {
private static final DecimalFormat df = new DecimalFormat("0.00");//保留两位小数点
public static void main(String[] args) {
Random random = new Random();
List<User> list = new ArrayList<User>();
for (int i = 1; i <= 5; i++) {
int age = random.nextInt(10) + 5;// 随机年龄:10-15
User u = new User(String.valueOf(i), "用户-" + i, age);
list.add(u);
}
Integer sum = list.stream().mapToInt(User::getAge).sum();
System.out.println("年龄总和:" +sum);
Integer max = list.stream().mapToInt(User::getAge).max().orElse(0);
System.out.println("年龄 最大:" + max);
Integer min = list.stream().mapToInt(User::getAge).min().orElse(0);
System.out.println("年龄 最小:" + min);
Double average = list.stream().mapToInt(User::getAge).average().orElse(0l);
System.out.println("年龄 平均:" + df.format(average));
}
static class User {
private String id;
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(String id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
}
}
效果截图:
溫馨提示:針對金融数据类型BigDecimal,求和方式必须使用Stream 类中的reduce函数
学生余额实例:
package com.digipower.test;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Random;
public class ListTest {
private static final DecimalFormat df = new DecimalFormat("0.00");//保留两位小数点
public static void main(String[] args) {
Random random = new Random();
List<User> list = new ArrayList<User>();
for (int i = 1; i <= 5; i++) {
int age = random.nextInt(10) + 5;// 随机年龄:10-15
User u = new User(String.valueOf(i), "用户-" + i, age);
double balance = random.nextDouble() * 100 + 100;//随机金额:100-200
u.setBalance(new BigDecimal(balance).setScale(BigDecimal.ROUND_HALF_UP, 2));
list.add(u);
}
Integer sum = list.stream().mapToInt(User::getAge).sum();
System.out.println("年龄总和:" +sum);
Integer max = list.stream().mapToInt(User::getAge).max().orElse(0);
System.out.println("年龄 最大:" + max);
Integer min = list.stream().mapToInt(User::getAge).min().orElse(0);
System.out.println("年龄 最小:" + min);
Double average = list.stream().mapToInt(User::getAge).average().orElse(0l);
System.out.println("年龄 平均:" + df.format(average));
BigDecimal add = list.stream().map(User::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("金额 总和:" + df.format(add));
Optional<User> maxBalance = list.stream().max((u1, u2) -> u1.getBalance().compareTo(u2.getBalance()));
System.out.println("金额 最高:" + df.format(maxBalance.get().getBalance()));
Optional<User> minBalance = list.stream().min((u1, u2) -> u1.getBalance().compareTo(u2.getBalance()));
System.out.println("金额 最低:" + df.format(minBalance.get().getBalance()));
}
static class User {
private String id;
private String name;
private int age;
private BigDecimal balance;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public BigDecimal getBalance() {
return balance;
}
public void setBalance(BigDecimal balance) {
this.balance = balance;
}
public User(String id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
}
}
效果截图:
还没有评论,来说两句吧...