关闭

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

878人阅读 评论(0) 收藏 举报
分类:

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


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<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等,最好自己做下非空处理。相信高质量的封装代码能为你自己加分的!






1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【Java基础】——集合工具类Collections和数组工具类Arrays

android培训------我的java笔记,期待与您交流! 一、集合工具类Collections 1、什么是Collections? Collections是对集合框架的一个工具类。它里边的方法都...
  • u010873512
  • u010873512
  • 2015-06-17 22:11
  • 2503

Java中应用Collections工具类的Sort()方法对List进行排序

一、Sort排序方法的使用: 1.对Integer类型进行排序     (该类型已经实现Comparable接口) 2.对String类类型进行排序   (该类型已经实现Comparable接口) 3...
  • BlueSky_USC
  • BlueSky_USC
  • 2016-07-17 00:26
  • 3031

Java集合框架:Collections工具类

java.util.Collections工具类提供很多有用的方法,使得程序猿操作集合类的时候更加的方便容易,这些方法都是静态的。整个Collections工具类源码差不多有4000行,我们针对一些典...
  • u013256816
  • u013256816
  • 2016-03-18 16:44
  • 4819

黑马程序员——JAVA基础——集合---概述、Collection中共性方法、List、Map、工具类Collections和Arrays

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
  • tian_wang
  • tian_wang
  • 2015-03-29 16:48
  • 496

java基础编程,用户自定义替换list列表部分位置元素(基于collections工具类扩展)

collections工具类定义了一个方法fill(List list, T obj),用于将指定list集合中的所有元素替换成自己制定的元素,基于这个思路,思考:是否可以讲list集合中的部分元素替...
  • huang1165441461
  • huang1165441461
  • 2015-05-06 09:51
  • 894

java中的集合工具类Collections中的常用方法

java中的集合工具类Collections中的常用方法 下面是集合中常用的方法 //static void swap(List list, int i, int j) :将指定列表中...
  • Code_My_Dream
  • Code_My_Dream
  • 2017-05-31 15:08
  • 326

集合框架_Collections工具类的常见方法讲解

package cn.itcast_01; import java.util.ArrayList; import java.util.Collections; import java.util.Li...
  • L1585931143
  • L1585931143
  • 2017-01-14 18:41
  • 289

(6) 集合之Collection接口和Iterator方法、Collection接口和Collections工具类

(6) 集合之Collection和Iterator接口、Collection接口和Collections工具类
  • BaAiCangZaiXinDi
  • BaAiCangZaiXinDi
  • 2015-06-06 16:52
  • 857

JAVA——集合框架的工具类Collections

Collections:它的出现给集合操作提供了更多的功能。这个类不需要创建对象,内部提供的都是静态方法。Collections.sort(list);//list集合进行元素的自然顺序排序。Coll...
  • Jungle_hello
  • Jungle_hello
  • 2016-05-15 21:39
  • 1115

Java生涯——Java基础---泛型、集合框架工具类:collections和Arrays

第一讲     泛型(Generic) 一、概述 1、JDK1.5版本以后出现的新特性。用于解决安全问题,是一个类型安全机制。 2、JDK1.5的集合类希望在定义集合时,明确表明你要...
  • hydznsqk
  • hydznsqk
  • 2017-03-14 12:24
  • 101
    个人资料
    • 访问:556502次
    • 积分:5402
    • 等级:
    • 排名:第5820名
    • 原创:102篇
    • 转载:33篇
    • 译文:0篇
    • 评论:352条
    个人简介
    我只是一个简单的Coder,为了兴趣和理想奋斗在生活的道路上
    希望大家多多交流,共同进步,有疑问或想法请留言或者私信,也可以加群:157797573

    博客专栏
    最新评论
    你还在一个人孤独的奋斗吗?
    其实,你并不寂寞,欢迎加入CSDN Java群,这里是你的另一个家!    点击加入:CSDN Java群