我想减少图表代码,因为我有太多的变量,我相信可以减少。
存储数据的对象:
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);
您能否提出一些更简单的解决方案来从List获取数据并将其插入饼图?
答案 0 :(得分:1)
可能存在牺牲一些可读性的风险(我猜这取决于你对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));
但是,说实话,我还没有看到你的原始代码有什么问题。