Java8 lambda 循环累加求和
接口流-Stream(),简单列举一下可以使用一下方法求和。
修饰符和类型 | 方法 | 描述 |
---|---|---|
Stream | map(Function<? super T,? extends R> mapper) | 返回由将给定函数应用于此流的元素的结果组成的流。 |
DoubleStream | mapToDouble(ToDoubleFunction<? super T> mapper) | 返回DoubleStream由给定函数应用于此流的元素的结果组成的结果。 |
IntStream | mapToInt(ToIntFunction<? super T> mapper) | 返回IntStream由将给定函数应用于此流的元素的结果组成的结果。 |
LongStream | mapToLong(ToLongFunction<? super T> mapper) | 返回LongStream由给定函数应用于此流的元素的结果组成的结果。 |
demo
package com.honghh.bootfirst.jdktest;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* ClassName: Jdk8lambda
* Description:
*
* @author honghh
* @date 2019/03/05 11:07
*/
public class Jdk8lambda {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
userList.add(new User(1L, "zhangsan", 23, new BigDecimal(55)));
userList.add(new User(2L, "lisi", 33, new BigDecimal(22)));
userList.add(new User(3L, "wangwu", 44, new BigDecimal(44)));
userList.add(new User(4L, "mazi", null, new BigDecimal(44)));
// 对年龄进行统计
int ageCount = userList.stream()
.mapToInt(item -> item.getAge() == null ? 0 : item.getAge())
.sum();
System.out.println("年龄总和: " + ageCount);
//对资产进行统计
BigDecimal amounts1 = userList
.stream()
.map(item -> item.getAmount() == null ? BigDecimal.ZERO : item.getAmount())
.reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("资产总和1 :" + amounts1);
// 对资产进行统计 (这种方式会存在空指针异常,所以建议还是使用上面一种方式 )
BigDecimal amounts2 = userList
.stream()
.map(User::getAmount)
.reduce(BigDecimal::add)
.get();
System.out.println("资产总和2: " + amounts2);
}
}
User.java
package com.honghh.bootfirst.jdktest;
import java.math.BigDecimal;
/**
* ClassName: User
* Description:
*
* @author honghh
* @date 2019/02/28 10:38
*/
public class User {
private Long id;
private String name;
private Integer age;
private BigDecimal amount;
public User() {
}
public User(Long id, String name) {
this.id = id;
this.name = name;
}
public User(Long id, String name, Integer age, BigDecimal amount) {
this.id = id;
this.name = name;
this.age = age;
this.amount = amount;
}
// 省略 get set
}
参考文献
Java Stream - 如何使用mapToInt映射到OptionalInt
https://www.w3cschool.cn/java/codedemo-484050009.html