JAVA集合框架工具类自定义Collections集合方法
作者:执笔记忆的空白 发布时间:2022-01-11 16:24:13
标签:java,collections,自定义,集合,工具类,封装
项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式。 话不多说,看代码:
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进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需
- 堆排序介绍:堆排序可以分为两个阶段。在堆的构造阶段,我们将原始数组重新组织安排进一个堆中;然后在下沉排序阶段,我们从堆中按顺序取出所有元素并
- 1、反射的概念1、概念反射,指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对任意一个对象,都能调用它的任意一个方法。这种
- StringBuilder在高性能场景下的正确用法关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuild
- 概述java.util.Random可以产生int、long、float、double以及Goussian等类型的随机数。这也是它与java
- Nashorn是什么Nashorn,发音“nass-horn”,是德国二战时一个坦克的命名,同时也是java8新一代的javascript引
- 第一步,导入jar包<!--Redis--> <dependency
- maven-compiler-plugin编译Java源码,一般只需设置编译的jdk版本<plugin> <g
- 在日常开发中我们经常会使用到行情数据,很多的时候我们根据一个基准数据区构造行情,但是随着时间的推移然来构造的数据与真实行情数据之间的差距越来
- 1. 数据类型:在Java源代码中,每个变量都必须声明一种类型(type)。Java数据类型(type)可以分为两大类:基本类型(primi
- AndroidStudio 实现加载字体资源的方法在android中字体的格式总是不能尽善尽美的显示出来 , 于是要求我们使用一
- Java BigDecimal的坑采坑处 BigDecimal bd =new BigDecimal(0.1);
- @PropertySource作用是:对自定义的properties文件加载使用:@PropertySource(value={"
- 记事本涉及到的仅仅是对string 的存储,而且在读取上并不存在什么难点,直接用textview显示便可以了。需要做的主要是使用SQLite
- 根据上下文环境,Java 的关键字 final 的含义有些微的不同,但通常它指的是“这是不能被改变的”。防止改变有两个原因:设计或效率。因为
- 网上有不少教程,那个提示框字符集都是事先写好的,例如用一个String[] 数组去包含了这些数据,但是,我们也可以吧用户输入的作为历史记录保
- spring validation多层对象校验1、第一层对象定义import java.io.Serializable; import ja
- 在C#中 “\”是特殊字符,要表示它的话需要使用“\\”。由于这种写法不方便,C#语言提供了@对其简化。只要在字符串前加上@即可直接使用“\
- 本文实例为大家分享了Drawerlayout侧滑菜单的具体代码,供大家参考,具体内容如下1、Drawerlayout的xml布局<?x
- Android 消息机制1.概述Android应用启动时,会默认有一个主线程(UI线程),在这个线程中会关联一个消息队列(MessageQu