Java自定义工具类之集合处理

一、使用场景

1.当从数据库中获取了一个对象集合后,如果需要得到这个集合里面每个对象的某个值。可以使用工具类将该值提取成一个新的集合,以便操作。
2.当从数据库中获取了一个对象集合后,如果需要得到这个集合里面每个对象的两个值形成的map集合,也是可以使用工具类将这两个值提取成一个map,以便操作。

二、代码

package com.porty.util;

import java.lang.reflect.Method;
import java.util.*;
import java.util.stream.Collectors;

/**
 * 对集合的处理,详细请看方法介绍
 * @author porty
 */
public class PortyCollectionOrMapUtil {
    private static final String PREFIX_GET = "get";

    /**
     * 将集合中的param1 和 param2的值转化为  param1:param2的map集合
     * @param list 对象集合
     * @param clazz 对象类型
     * @param param1 key的名字
     * @param param2 value的名字
     * @return param1:param2 的map集合
     */
    public static HashMap<Object,Object> listTransformMap(List list, Class clazz, String param1, String param2) throws Exception {
        try {
            // 处理param1
            param1 = param1.replaceFirst(param1.substring(0,1), param1.substring(0,1).toUpperCase());
            // 处理param2
            param2 = param2.replaceFirst(param2.substring(0,1), param2.substring(0,1).toUpperCase());
        } catch (Exception e) {
        	// 自定义异常
            throw new PortyException("param1 or param2 is empty!");
        }
        HashMap map = new HashMap();
        Method[] methods = clazz.getMethods();
        Method method1 = null;
        Method method2 = null;
        for (Method method : methods) {
            if(method1!=null && method2!=null) {
                break;
            }
            if(method.getName().equals(PREFIX_GET + param1)) {
                method1 = method;
            }else if(method.getName().equals(PREFIX_GET + param2)) {
                method2 = method;
            }
        }
        if(method1!=null&&method2!=null) {
            for (Object object : list) {
                map.put(method1.invoke(object),method2.invoke(object));
            }
            return map;
        }
        return map;
    }

    /**
     * 将对象集合中的某个参数提取成一个List集合
     * 注意:List集合可能存在重复值,如要去重请使用transformParamSet
     * @param list 对象集合
     * @param clazz 对象类型
     * @param param 集合的值
     * @return
     */
    public static List transformParamList(List list, Class clazz, String param) throws Exception {
        try {
            // 处理param
            param = param.replaceFirst(param.substring(0,1), param.substring(0,1).toUpperCase());
        } catch (Exception e) {
            throw new PortyException("param is empty!");
        }
        List rst = new ArrayList();
        Method[] methods = clazz.getMethods();
        Method method1 = null;
        for (Method method : methods) {
            if(method1!=null) {
                break;
            }
            if(method.getName().equals(PREFIX_GET + param)) {
                method1 = method;
            }
        }
        if(method1!=null) {
            for (Object object : list) {
                rst.add(method1.invoke(object));
            }
            return rst;
        }
        return rst;
    }

    /**
     * 将对象集合中的某个参数提取成一个Set集合
     * @param list 对象集合
     * @param clazz 对象类型
     * @param param 集合的值
     * @return
     */
    public static Set transformParamSet(List list, Class clazz, String param) throws Exception {
        return (Set)transformParamList(list, clazz, param).stream().collect(Collectors.toSet());
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值