博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工具类——自定义Collections集合方法
阅读量:6232 次
发布时间:2019-06-21

本文共 3265 字,大约阅读时间需要 10 分钟。

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

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

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

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
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
() { @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

你可能感兴趣的文章
RabbitMQ 消息确认机制
查看>>
简单的新浪微博OAuth认证实现
查看>>
Mybatis表关联一对多
查看>>
Spring_Aop基于配置文件
查看>>
R cannot be resolved的几种可能 R not generated
查看>>
随机快速排序
查看>>
linux下创建用户、用户组及赋予sudoer权限
查看>>
简述Hibernate配置连接池
查看>>
路径1
查看>>
poj 2492 A Bug's Life (并查集)
查看>>
自定义Loader
查看>>
IOS 给UILabel字体加一个带颜色的边框
查看>>
查看电脑硬件信息dos命令
查看>>
2010年Java高新技术A(5)类加载器和代理
查看>>
每天学点GDB 10
查看>>
ASP.NET MVC 实现多模版的方法
查看>>
Android利用Mediapalyer播放本地资源文件声音
查看>>
MongoDB高级查询用法大全
查看>>
代码整洁之道-第4章-注释-读书笔记
查看>>
单例模式——防止序列化、反序列化以及反射攻击
查看>>