gpt4 book ai didi

java - 减少图表代码

转载 作者:行者123 更新时间:2023-12-01 10:36:12 24 4
gpt4 key购买 nike

我想减少图表代码,因为我有太多变量,我相信这些变量可以减少。

存储数据的对象:

public class EventsObj
{
private String date;
private int info;
private int error;
private int warning;
private int critical;

public EventsObj()
{
}

public EventsObj(String date, int info, int error, int warning, int critical)
{
this.date = date;
this.info = info;
this.error = error;
this.warning = warning;
this.critical = critical;
}

public String getDate()
{
return date;
}

public void setDate(String date)
{
this.date = date;
}

public int getInfo()
{
return info;
}
................

SQL 查询数据列表:

    List<EventsObj> eventsObj = new ArrayList<>();

eventsObj.add(new EventsObj(String.valueOf(rs.getTimestamp("EVENT_DATE")), rs.getInt("INFO"), rs.getInt("WARN"), rs.getInt("CRITICAL"), rs.getInt("ERROR")));

但是当我想使用饼图中的数据时,我使用这个丑陋的代码:

ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList();

int info = 0;
int error = 0;
int warning = 0;
int critical = 0;

for (int i = 0; i < eventsObj.size(); i++)
{
EventsObj get = eventsObj.get(i);
info = get.getInfo() + info;
error = get.getError() + error;
warning = get.getWarning() + warning;
critical = get.getCritical() + critical;
}

pieChartData.add(new PieChart.Data("Info", info));
pieChartData.add(new PieChart.Data("Error", error));
pieChartData.add(new PieChart.Data("Warning", warning));
pieChartData.add(new PieChart.Data("Critical", critical));


final PieChart chart = new PieChart(pieChartData);

您能否提出一些更简单的解决方案来从列表中获取数据并将其插入到饼图中?

最佳答案

可以说,冒着牺牲一些可读性的风险(我猜这取决于您对 Java 8 功能的熟悉程度),您可以这样做

private <T> PieChart.Data createPieData(List<T> items, String name,
ToIntFunction<T> function) {

int value = items.stream().collect(Collectors.summingInt(function));
return new PieChart.Data(name, value);
}

然后

final PieChart chart = new PieChart();

chart.getData().add(createPieData(eventsObj, "Info", EventsObj::getInfo));
chart.getData().add(createPieData(eventsObj, "Error", EventsObj::getError));
chart.getData().add(createPieData(eventsObj, "Warning", EventsObj::getWarning));
chart.getData().add(createPieData(eventsObj, "Critical", EventsObj::getCritical));

但是,说实话,我真的不明白你的原始代码有什么问题。

关于java - 减少图表代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34710706/

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