很抱歉,这个问题标题不是100%正确。因此,我将在这里解释我的情况。
我创建了一个函数,将4个数据集合并为一种返回格式。因为那是前端需要的格式。所以现在工作正常。

public ReturnFormat makeThribleLineChart(List<NameCountModel> totalCount, List<NameCountModel>,p1Count, List<NameCountModel> p2Count, List<NameCountModel> average) {

        ReturnFormat returnFormat = new ReturnFormat(null,null);

            try {

                String[] totalData = new String[totalCount.size()];
                String[] p1Data = new String[p1Count.size()];
                String[] p2Data = new String[p2Count.size()];
                String[] averageData = new String[p2Count.size()];
                String[] lableList = new String[totalCount.size()];

                for (int x = 0; x < totalCount.size(); x++) {
                    totalData[x] = totalCount.get(x).getCount();
                    p1Data[x] = p1Count.get(x).getCount();
                    p2Data[x] = p2Count.get(x).getCount();
                    averageData[x] = average.get(x).getCount();
                    lableList[x] = totalCount.get(x).getName();
                }

                FormatHelper<String[]> totalFormatHelper= new FormatHelper<String[]>();
                totalFormatHelper.setData(totalData);
                totalFormatHelper.setType("line");
                totalFormatHelper.setLabel("Uudet");
                totalFormatHelper.setyAxisID("y-axis-1");

                FormatHelper<String[]> p1FormatHelper= new FormatHelper<String[]>();
                p1FormatHelper.setData(p1Data);
                p1FormatHelper.setType("line");
                p1FormatHelper.setLabel("P1 päivystykseen heti");

                FormatHelper<String[]> p2FormatHelper= new FormatHelper<String[]>();
                p2FormatHelper.setData(p2Data);
                p2FormatHelper.setType("line");
                p2FormatHelper.setLabel("P2 päivystykseen muttei yöllä");

                FormatHelper<String[]> averageFormatHelper= new FormatHelper<String[]>();
                averageFormatHelper.setData(averageData);
                averageFormatHelper.setType("line");
                averageFormatHelper.setLabel("Jonotusaika keskiarvo");
                averageFormatHelper.setyAxisID("y-axis-2");

                List<FormatHelper<String[]>> formatHelpObj = new ArrayList<FormatHelper<String[]>>();
                formatHelpObj.add(totalFormatHelper);
                formatHelpObj.add(p1FormatHelper);
                formatHelpObj.add(p2FormatHelper);
                formatHelpObj.add(averageFormatHelper);

                returnFormat.setData(formatHelpObj);
                returnFormat.setLabels(lableList);
                returnFormat.setMessage(Messages.Success);
                returnFormat.setStatus(ReturnFormat.Status.SUCCESS);


            } catch (Exception e) {

                returnFormat.setData(null);
                returnFormat.setMessage(Messages.InternalServerError);
                returnFormat.setStatus(ReturnFormat.Status.ERROR);

            }
            return returnFormat;

    }


因此,正如您在此处看到的那样,所有格式都是硬编码的。所以我的问题是如何自动执行此代码进行列表计数。假设下一次我必须为五个数据集创建图表格式。因此,我必须为其创建另一个功能。那就是我要减少的事情。所以我希望你能理解我的问题。

谢谢。

最佳答案

您正在尝试解决基于动态信息组成结果对象(在本例中为ReturnFormat)的更一般的问题。此外,还与每个数据集一起设置了一些元数据-类型,标签等。在您发布的示例中,您已经对数据集和该元数据之间的关系进行了硬编码,但是您需要某种方式如果此处具有可变数量的参数,则可以动态地建立数据的这种关系。

因此,您有两种选择:


makeThribleLineChart设置为varargs method以接受表示您数据的可变数量的参数。现在,您遇到了将元数据与参数关联的问题-最好的选择可能是将数据和元数据一起包装在作为makeThribleLineChart的每个参数提供的一些新对象中。
因此,您最终得到的签名看起来有点像ReturnFormat makeThribleLineChart(DataMetadataWrapper... allDatasets),其中DataMetadataWrapper包含构建一个FormatHelper实例所需的所有内容。
使用类似于collection builders in guava的构建器模式,例如:



class ThribbleLineChartBuilder {
    List<FormatHelper<String[]>> formatHelpObj = new ArrayList<>();

    ThribbleLineChartBuilder addDataSet(String describeType, String label, String yAxisId, List<NameCountModel> data) {
        String[] dataArray = ... ; // build your array of data

        FormatHelper<String[]> formatHelper = new FormatHelper<String[]>();
        formatHelper.setData(dataArray);
        formatHelper.setType(describeType);
        ... // set any other parameters that the FormatHelper requires here

        formatHelpObj.add(formatHelper);

        return this;
    }

    ReturnFormat build() {
        ReturnFormat returnFormat = new ReturnFormat(null, null);
        returnFormat.setData(this.formatHelpObj);
        ... // setup any other fields you need in ReturnFormat

        return returnFormat;
    }
}

// usage:
new ThribbleLineChartBuilder()
 .addDataSet("line", "Uudet", "y-axis-1", totalCount)
 .addDataSet("line", "P1 päivystykseen heti", null, p1Count)
 ... // setup your other data sources
 .build()

09-10 04:13