首页 > 编程语言 >java 行转列

java 行转列

时间:2023-06-05 10:23:17浏览次数:47  
标签:java String firstColSet headerSet List param 转列 public

行转列工具类
public class RowConvertColUtil {
    private static final String NULL_VALUE = "";
    private static final String HEADER_NULL_VALUE = "工序";
    private static Set<Object> headerSet;
    private static Set<Object> firstColSet;

    private RowConvertColUtil() {
    }

    public static class ConvertData {
        private Set<Object> headerSet;
        private Set<Object> firstColSet;
        private List<List<Object>> dataList;

        public ConvertData(List<List<Object>> dataList, Set<Object> headerSet, Set<Object> firstColSet) {
            this.headerSet = headerSet;
            this.firstColSet = firstColSet;
            this.dataList = dataList;
        }

        public Set<Object> getHeaderSet() {
            return headerSet;
        }

        public void setHeaderSet(Set<Object> headerSet) {
            this.headerSet = headerSet;
        }

        public Set<Object> getFirstColSet() {
            return firstColSet;
        }

        public void setFirstColSet(Set<Object> firstColSet) {
            this.firstColSet = firstColSet;
        }

        public List<List<Object>> getDataList() {
            return dataList;
        }

        public void setDataList(List<List<Object>> dataList) {
            this.dataList = dataList;
        }
    }

    /**
     * 行转列,返回ConvertData
     *
     * @param orignalList   原始list
     * @param headerName    列表头字段名
     * @param firstColName  首列字段名
     * @param valueFiedName 值列的字段名
     * @param needHeader    是否需要返回列表头
     * @return ConvertData
     */
    public static synchronized ConvertData doConvertReturnObj(List orignalList, String headerName, String firstColName, String valueFiedName, boolean needHeader) throws Exception {
        List<List<Object>> lists = doConvert(orignalList, headerName, firstColName, valueFiedName, needHeader);
        return new ConvertData(lists, headerSet, firstColSet);
    }

    /**
     * 行转列,返回转换后的list
     *
     * @param orignalList   原始list
     * @param headerName    列表头字段名
     * @param firstColName  首列字段名
     * @param valueFiedName 值列的字段名
     * @param needHeader    是否需要返回列表头
     */
    public static synchronized List<List<Object>> doConvert(List orignalList, String headerName, String firstColName, String valueFiedName, boolean needHeader) throws Exception {
        headerSet = new LinkedHashSet<>();
        firstColSet = new LinkedHashSet<>();
        List<List<Object>> resultList = new ArrayList<>();

        getHeaderFirstcolSet(orignalList, headerName, firstColName);
        if (needHeader) {
            List<Object> headerList = new ArrayList<>();
            //填充进header
            headerList.add(HEADER_NULL_VALUE);
            headerList.addAll(headerSet);
            resultList.add(headerList);
        }
        for (Object firstColNameItem : firstColSet) {
            List<Object> colList = new ArrayList<>();
            //名称
            colList.add(firstColNameItem);
            for (Object headerItem : headerSet) {
                boolean flag = true;
                for (Object orignalObjectItem : orignalList) {
                    Field headerField = orignalObjectItem.getClass().getDeclaredField(headerName);
                    headerField.setAccessible(true);
                    Field firstColField = orignalObjectItem.getClass().getDeclaredField(firstColName);
                    firstColField.setAccessible(true);
                    Field valueField = orignalObjectItem.getClass().getDeclaredField(valueFiedName);
                    valueField.setAccessible(true);
                    if (headerItem.equals(headerField.get(orignalObjectItem))) {
                        if (firstColNameItem.equals(firstColField.get(orignalObjectItem))) {
                            colList.add(valueField.get(orignalObjectItem));
                            flag = false;
                            break;
                        }
                    }
                }
                if (flag) {
                    colList.add(NULL_VALUE);
                }
            }
            resultList.add(colList);
        }
        return resultList;
    }

    private static void getHeaderFirstcolSet(List orignalList, String headerName, String firstColName) {
        try {
            for (Object item : orignalList) {
                Field headerField = item.getClass().getDeclaredField(headerName);
                headerField.setAccessible(true);
                Field firstColField = item.getClass().getDeclaredField(firstColName);
                firstColField.setAccessible(true);
                headerSet.add(headerField.get(item));
                firstColSet.add(firstColField.get(item));
            }
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

}
View Code 调用方式:
processName:列表头字段名;
strTime首列字段名;
rejectRate:首列字段值
 List<List<Object>> lists = RowConvertColUtil.doConvert(rateList, "processName", "strTime", "rejectRate", true);
View Code

结果:

 "data": [
        [
            "日期",
             .
             .
             .
             .
             .
             .
             .
             .
           
        ],
        [
            "2023-06-02",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0"
        ],
        [
            "2023-06-03",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0",
            "0"
        ]
    ]            
View Code

 

标签:java,String,firstColSet,headerSet,List,param,转列,public
From: https://www.cnblogs.com/zxy-come-on/p/17457152.html

相关文章

  • Java:从单线程计数器到多线程数据同步synchronized和原子类Atomic
    (目录)使用单线程单线程修改计数器的值,没有发生问题,每次运行结果都是10000,不过程序耗时较长packagecom.example;/***计数器*/classCounter{privatestaticlongcount;publicstaticlonggetCount(){returncount;}publicstaticv......
  • 基于JAVA操作系统在线网站SQL
    随着21世纪的到来,人们更深刻的感受到了计算机在生活和工作中作用的重要,越来越多的职业需要具有计算机的应用技能。掌握计算机是职业的需要,社会的需要,更是事业发展的需要。今天,计算机技术不但广泛地应用在办公自动化中,还全面参与到各行各业。所有与计算机相关的职业都要求工作者有......
  • Java学习笔记(十四)
    1.请描述你理解的IO流的作用 I/O流(输入/输出流)的作用是在程序与外部世界(例如文件、网络、控制台等)之间传输数据。2.请描述I/O流的体系结构(1)InputStream类和OutputStream类,其实现类:FileInputStream和FileOutputStream(2)Reader类和Writer类,其实现类:FileReader和FileWriter(3)缓......
  • Java Map 集合类简介
    源:http://www.oracle.com/technetwork/cn/articles/maps1-100947-zhs.html#T1评:了解最常用的集合类型之一Map的基础知识以及如何针对您应用程序特有的数据优化Map。java.util中的集合类包含Java中某些最常用的类。最常用的集合类是List和Map。......
  • 04.如何创建并运行java线程
    评:原文链接译者:章筱虎校对:方腾飞Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类。可以用如下方式用java中创建一个线程:查看源代码打印帮助1Treadthread=newThread();执行该线程可以调用该线程的start()方法:查看源代码打印帮助1thre......
  • Java URL正则表达式
    评:网上转贴的Java正则很让人失望,一篇JavaScript正则集录被很多人当成Java正则表达式转来转去,我擦,太坑爹了吧。自己写一个吧importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassRegularExpressionTest{publicstaticvoidmain(S......
  • 浅谈java异常[Exception]
    评:一.异常的定义在《java编程思想》中这样定义异常:阻止当前方法或作用域继续执行的问题。虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常。绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败。之所以java要提出异常处理机制,就是要......
  • 商城系统比较(三款不错的java开源商城系统推荐)和其他推荐
    今天给大家分享三套github上优质的商城开源项目,排名不分先后。1、newbee-mall(新蜂商城)仓库地址:https://github.com/newbee-ltd/newbee-mall特点:springboot开发,主要针对pc端,代码设计非常简洁,没有过多的分层,非常适合初学者学习。 2、macrozheng/mall(没有中文名,不太好记)仓库地......
  • java的异常
    异常:程序中发生的不正常的情况成为异常(语法错误和逻辑错误不是异常)。异常分为两类:1.Error:java虚拟机无法解决的严重问题,程序会崩溃,如栈溢出(stackoverflowerror)、内存不足等2.Exception:由于编程错误或外在因素导致的一般性问题,可以使用正对行的代码进行处理,如......
  • JAVA动态代理内部实现
    评:一代理设计模式代理模式为目标对象提供一种代理以控制对实际对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。为了保持行为的一致性,代理类和实际委托类通常会实现相同的接口,所以在访问者看来两者没......