gpt4 book ai didi

java - 如何根据数组列表大小自动执行功能

转载 作者:行者123 更新时间:2023-12-02 00:58:10 25 4
gpt4 key购买 nike

很抱歉这个问题标题不是 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()

关于java - 如何根据数组列表大小自动执行功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61053760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com