前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工具类——自定义Collections集合方法

工具类——自定义Collections集合方法

作者头像
执笔记忆的空白
发布2020-12-25 14:46:46
4700
发布2020-12-25 14:46:46
举报
文章被收录于专栏:Java日常Java日常

项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式。 话不多说,看代码:

1、封装的自定义集合工具类:CollectionsCustom

代码语言:javascript
复制
package com.test.util;

import java.util.Collection;

import org.apache.commons.collections.CollectionUtils;

/**
 * 自定义集合处理类
 * @author : shijing
 * 2017年5月18日下午2:00:10
 */
public class CollectionsCustom {

	
	/**
     * 将传入的collection内对象进行计算后得出结果
      * @author : shijing  
      * 2017年5月18日下午3:09:53
     * @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;
    }
    
    /**
     * 自定义计算接口
     * @author : shijing
     * 2017年5月18日下午3:09:53
     * @param <Input>
     * @param <Result>
     */
    public interface ReduceFunction<Input, Result> {

        Result apply(Input input, Result lastResult);

    }
    
}

2、测试类TestCollections

代码语言:javascript
复制
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、测试输出结果:

代码语言:javascript
复制
总共分数:187.15
总共年龄:73

这里如果传入的是封装类型Integer等,最好自己做下非空处理。相信高质量的封装代码能为你自己加分的!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、封装的自定义集合工具类:CollectionsCustom
  • 2、测试类TestCollections
  • 3、测试输出结果:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档