本文共 3265 字,大约阅读时间需要 10 分钟。
项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式。 话不多说,看代码:
1、封装的自定义集合工具类:CollectionsCustom
package com.test.util;import java.util.Collection;
import org.apache.commons.collections.CollectionUtils;
/**
2017年5月18日下午2:00:10
*/public class CollectionsCustom {/**
/**
@param <Result>
*/public interface ReduceFunction<Input, Result> {Result apply(Input input, Result lastResult);
}
}
2、测试类TestCollections
package com.test;import java.math.BigDecimal;
import java.util.Arrays;import java.util.List;import com.test.util.CollectionsCustom;
public class TestCollection {
private static Listlist = Arrays.asList( new User("张三", BigDecimal.valueOf(35.6), 18), new User("李四", BigDecimal.valueOf(85), 30), new User("赵六", BigDecimal.valueOf(66.55), 25));public static void main(String[] args) { //统计集合内分数之和 testTotalScore(); //统计集合内年龄之和 testTotalAge();}private static void testTotalScore(){ //统计集合内分数之和 BigDecimal totalScore = CollectionsCustom.reduce(list, BigDecimal.ZERO, new CollectionsCustom.ReduceFunction () { @Override public BigDecimal apply(User input, BigDecimal lastResult) { // TODO Auto-generated method stub return lastResult.add(input.getScore()); } }); System.out.println("总共分数:" + totalScore);}private static void testTotalAge(){ //统计集合内年龄之和 Integer totalAge = CollectionsCustom.reduce(list, 0, new CollectionsCustom.ReduceFunction () { @Override public Integer apply(User input, Integer lastResult) { // TODO Auto-generated method stub return lastResult += input.getAge(); } }); System.out.println("总共年龄:" + totalAge);}static class User{ private String userName; //姓名 private BigDecimal score;//分数 private Integer age; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public BigDecimal getScore() { return score; } public void setScore(BigDecimal score) { this.score = score; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public User(String userName, BigDecimal score, Integer age) { super(); this.userName = userName; this.score = score; this.age = age; } public User() { // TODO Auto-generated constructor stub }}
}
3、测试输出结果:
总共分数:187.15总共年龄:73这里如果传入的是封装类型Integer等,最好自己做下非空处理。相信高质量的封装代码能为你自己加分的!
转载于:https://blog.51cto.com/13545923/2053323