JAVA集合框架工具类自定义Collections集合方法
时间:2020-11-26 22:51:42|栏目:JAVA代码|点击: 次
项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式。 话不多说,看代码:
1、封装的自定义集合工具类:CollectionsCustom
package com.test.util; import java.util.Collection; import org.apache.commons.collections.CollectionUtils; /** * 自定义集合处理类 */ public class CollectionsCustom { /** * 将传入的collection内对象进行计算后得出结果 * @param original 计算前collection * @param reduceFunction 计算方式 * @param initValue 计算结果初始值 * @param <Input> collection对象类型 * @param <Output> 结果类型 * @return */ public static <Input, Output> Output reduce(Collection<Input> original, Output initValue, ReduceFunction<Input, Output> reduceFunction) { Output result = initValue; if (CollectionUtils.isEmpty(original)) { return result; } if (reduceFunction == null) { return result; } for (Input input : original) { result = reduceFunction.apply(input, result); } return result; } /** * 自定义计算接口 * @param <Input> * @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 List<User> list = 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<User, BigDecimal>() { @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<User, Integer>() { @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
等,最好自己做下非空处理。相信高质量的封装代码能为你自己加分的!
总结
上一篇:Spring Boot(三)之找回熟悉的Controller,Service
栏 目:JAVA代码
本文标题:JAVA集合框架工具类自定义Collections集合方法
本文地址:http://www.codeinn.net/misctech/26616.html
阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机