核心功能代码:
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;
效果截图:
核心功能代码: 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 mi
list.stream().mapToDouble(User::getHeight).sum()//和
list.stream().mapToDouble(User::getHeight).max()//最大
list.stream().mapToDouble(User::getH...
防止集合及值的空指针
// 实例化函数
FunctionCustom<GetSalesDataReportsServiceOutputDto> functionCustom = new FunctionCustom<>();
//使用-》对 clueTodayCount 值求和
functionCustom.functionListL
数值类型求和
ArrayList<Double> sumAmountResult = new ArrayList<Double>();
sumAmountResult.add(111d);
sumAmountResult.add(222d);
sumAmountResult.add(333d);
sumAmountResult.add(444d);
double sumChildAmountResult = sumAmountResult.stream().mapToDouble(D
主要利用了reduce方法和Collectors.summing的方法,reduce根据初始值(参数1)和累积函数(参数2)依次对数据流进行操作,第一个值与初始值送入累积函数,后面计算结果和下一个数据流依次送入累积函数实现求和,Collectors.summingXXX()(XXX表示具体数据类型)将流中所有元素视为Long类型,并计算所有元素的总和,下面直接给一个实例:
import java.util.ArrayList;
import java.util.Collection;
import ja
List<User> userlist = userService.findAll();
Integer sum= userlist .stream().collect(Collectors.summingInt(User::getAge));
其他的操作:
summingDouble
求和,Stream的
本文主要讲解:
Java 8 Stream之sorted()排序示例:使用
java 8 的流式sorted排序
List集合
功能说明:以自然序或着自定义Comparator接口排序规则来排序一个流。
功能详细说明:
1、sorted()默认使用自然序排序, 其中的元素必须实现Comparable接口
2、sorted(Comparator<? super T> comparator):我们可以使用lambada 来创建一个Comparator实例。可以按照升序或着降序来排序元素。
要获取 `List<BigDecimal>` 中元素的最大值、最小值和平均值,你可以使用 `Collections` 类或者流(Stream)来完成。以下是两种不同的实现方式:
1. 使用 `Collections` 类:
```java
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<BigDecimal> bigDecimalList = Arrays.asList(
new BigDecimal("1.23"),
new BigDecimal("4.56"),
new BigDecimal("7.89")
// 获取最大值
BigDecimal max = Collections.max(bigDecimalList);
System.out.println("最大值: " + max);
// 获取最小值
BigDecimal min = Collections.min(bigDecimalList);
System.out.println("最小值: " + min);
// 获取平均值
BigDecimal sum = BigDecimal.ZERO;
for (BigDecimal num : bigDecimalList) {
sum = sum.add(num);
BigDecimal average = sum.divide(BigDecimal.valueOf(bigDecimalList.size()), 2, BigDecimal.ROUND_HALF_UP);
System.out.println("平均值: " + average);
在上述示例中,我们创建了一个 `List<BigDecimal>`,名为 `bigDecimalList`,其中包含了几个 `BigDecimal` 对象。然后,我们使用 `Collections.max` 和 `Collections.min` 方法分别获取列表中的最大值和最小值。对于平均值的计算,我们使用一个循环来累加列表中的元素,并使用 `divide` 方法将总和除以列表的大小来计算平均值。
运行以上代码,输出将会是:
最大值: 7.89
最小值: 1.23
平均值: 4.26
2. 使用流(Stream):
```java
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<BigDecimal> bigDecimalList = Arrays.asList(
new BigDecimal("1.23"),
new BigDecimal("4.56"),
new BigDecimal("7.89")
// 获取最大值
BigDecimal max = bigDecimalList.stream()
.max(BigDecimal::compareTo)
.orElse(BigDecimal.ZERO);
System.out.println("最大值: " + max);
// 获取最小值
BigDecimal min = bigDecimalList.stream()
.min(BigDecimal::compareTo)
.orElse(BigDecimal.ZERO);
System.out.println("最小值: " + min);
// 获取平均值
BigDecimal sum = bigDecimalList.stream()
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal average = sum.divide(BigDecimal.valueOf(bigDecimalList.size()), 2, BigDecimal.ROUND_HALF_UP);
System.out.println("平均值: " + average);
在这个示例中,我们使用流的 `max` 和 `min` 方法来获取列表中的最大值和最小值。对于平均值的计算,我们使用 `reduce` 方法将列表中的元素累加起来,并使用 `divide` 方法计算平均值。
运行以上代码,输出将会是相同的结果:
最大值: 7.89
最小值: 1.23
平均值: 4.26
希望能对你有所帮助!如果还有其他问题,请随时提问。