当前位置: 首页 > 知识库问答 >
问题:

如何分别减少列表的数量如何多次使用列表

慕容品
2023-03-14

我有问题,以简化我的代码与许多地图和列表。

public List<Map<String, Object>> getResultFromExcelFile() throws Exception {
    ArrayList<Map<String, Object>> allResults = new ArrayList<>();


    Map<String, Object> previousYearResult = new HashMap<>();
    Map<String, Object> actYearResult = new HashMap<>();
    Map<String, Object> plusOneYearResult = new HashMap<>();
    Map<String, Object> plusTwoYearResult = new HashMap<>();


    ArrayList<Map<String, Object>> previousYearResultActList = new ArrayList<>();

    ArrayList<Map<String, Object>> actYearResultPlanList = new ArrayList<>();
    ArrayList<Map<String, Object>> actYearResultFcList = new ArrayList<>();
    ArrayList<Map<String, Object>> actYearResultActList = new ArrayList<>();

    ArrayList<Map<String, Object>> plusOneYearResultPlanList = new ArrayList<>();
    ArrayList<Map<String, Object>> plusOneYearResultFcList = new ArrayList<>();
    ArrayList<Map<String, Object>> plusOneYearResultActList = new ArrayList<>();

    ArrayList<Map<String, Object>> plusTwoYearResultPlanList = new ArrayList<>();
    ArrayList<Map<String, Object>> plusTwoYearResultFcList = new ArrayList<>();
    ArrayList<Map<String, Object>> plusTwoYearResultActList = new ArrayList<>();

    for (int i = 20; i < 67; i++) {
        for (int j = 526; j < 1141; j++) {
            if (i < BEGIN_COLUMN_YEAR_MINUS_1 + 12) {
                //act
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 1) {
                    previousYearResultActList.add(this.buildResultMap(i, j));
                }
            }
            if (i >= BEGIN_COLUMN_YEAR_0 && i < BEGIN_COLUMN_YEAR_0 + 12) {
                //plan
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 3) {
                    actYearResultPlanList.add(this.buildResultMap(i, j));
                }
                //fc
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 2) {
                    actYearResultFcList.add(this.buildResultMap(i, j));
                }
                //act
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 1) {
                    actYearResultActList.add(this.buildResultMap(i, j));
                }
            }

            if (i >= BEGIN_COLUMN_YEAR_1 && i < BEGIN_COLUMN_YEAR_1 + 12) {
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 3) {
                    //plan
                    plusOneYearResultPlanList.add(this.buildResultMap(i, j));
                }
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 2) {
                    //fc
                    plusOneYearResultFcList.add(this.buildResultMap(i, j));
                }
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 1) {
                    //act
                    plusOneYearResultActList.add(this.buildResultMap(i, j));
                }
            }
            if (i >= BEGIN_COLUMN_YEAR_2 && i < BEGIN_COLUMN_YEAR_2 + 12) {
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 3) {
                    //plan
                    plusTwoYearResultPlanList.add(this.buildResultMap(i, j));
                }
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 2) {
                    //fc
                    plusTwoYearResultFcList.add(this.buildResultMap(i, j));
                }
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 1) {
                    //act
                    plusTwoYearResultActList.add(this.buildResultMap(i, j));
                }
            }
        }
    }
    previousYearResult.put("actList", previousYearResultActList);

    actYearResult.put("planList", actYearResultPlanList);
    actYearResult.put("fcList", actYearResultFcList);
    actYearResult.put("actList", actYearResultActList);

    plusOneYearResult.put("planList", plusOneYearResultPlanList);
    plusOneYearResult.put("fcList", plusOneYearResultFcList);
    plusOneYearResult.put("actList", plusOneYearResultActList);

    plusTwoYearResult.put("planList", plusTwoYearResultPlanList);
    plusTwoYearResult.put("fcList", plusTwoYearResultFcList);
    plusTwoYearResult.put("actList", plusTwoYearResultActList);


    allResults.add(previousYearResult);
    allResults.add(actYearResult);
    allResults.add(plusOneYearResult);
    allResults.add(plusTwoYearResult);

    return allResults;
}
 if (i >= BEGIN_COLUMN_YEAR_0 && i < BEGIN_COLUMN_YEAR_0 + 12) {...}

我想填充3个列表,然后填充到匹配的地图。清空3个列表,并在下一个if条件中再次填充它们,然后将它们传递到匹配映射中。

有人知道我如何最好地实现这一点,从而减少列表的数量吗?谢谢你

共有1个答案

严朝明
2023-03-14

似乎三种类型的代码非常相似。您应该创建一个可重用的函数

public ArrayList<Map<String, Object>> readExcel(int beginColumnYear) {
ArrayList<Map<String, Object>> list = new ArrayList<>();
for (int i = 20; i < 67; i++) {
    for (int j = 526; j < 1141; j++) {
        if (i >= beginColumnYear && i < beginColumnYear + 12) {
                if (findFirstDigit(getWorkBook().getNumber(j, 1)) == 3) {
                    list.add(this.buildResultMap(i, j));
                }
                ...
            }
    }     
}
return list;
}

...
actYearResult.put("planList", readExcel(BEGIN_COLUMN_YEAR_0));
...

此外,还应该优化代码的速度和内存使用

 类似资料:
  • 我在某个网站上自动化了一个功能,我想调整表的“Description”列的大小,但在对下面提到的代码执行相同操作时,得到了某种警告或错误,而同样的情况不会发生。 //这是我想要更改宽度的描述列 实际产量如下:- 2019年4月1日8:35:54下午组织。openqa。硒。互动。动作移动到元素 信息:当使用W3C操作命令时,偏移量是从元素的中心开始的——这是我在控制台中得到的警告。 在用户界面上,列

  • 我有以下数据框: 我想按和进行分组,并组合

  • 问题内容: 如上所示是一个列表,我们只需要从中过滤偶数即可。我可以通过使用方法来实现。但是,有没有可能用方法达到相同的目的。希望该方法通过执行给定的BynaryOperation过滤掉所有其他元素,并返回简化列表。 如果我对方法的理解不正确,请告诉我该方法的确切作用。 问题答案: 您对减排的理解是错误的。将对所有元素重复应用一个函数以获得 单个结果 。 您似乎想像做还原 实际上,它确实 尽管这是一

  • 问题内容: 我遵循Presentation Model模式对一些屏幕进行编码。 我把一些豆子放在一个 我将在中显示此列表的内容,这要归功于 我还想同时在组合框(以表单的形式)中显示此列表中的 某些记录* , 并同时 在JList中显示 其他 记录。 *** 这三个屏幕(及其模型)彼此独立 如何管理在我的列表中添加{一个或多个} /删除{一个或多个}并在各处实时查看更改? 我将要编写自己的Obser

  • 根据SCJP的数组列表。大小应该取决于可用内存的大小,但是list.getSize()返回一个整数。假设< code >整数。MAXSIZE是最大值。阵列容量。即int最大允许值

  • 我正在使用spring boot开发客户端应用程序。在运行spring boot应用程序(使用完全可执行的jar)时,x64服务器的内存占用约为190M,x86服务器的内存占用约为110M。 我的jvm选项是(-xmx64m-xms64m-xx:maxpermsize=64m-server),为什么在x64服务器中,内存占用这么大?如何将内存使用量降低到150M以下? 多谢了。