今天做项目,碰到一个二维数据迭代的问题,现封装成一个简单的方法。欢迎提出更好的建议,我是使用二维数组迭代的。
使用的是模拟数据迭代,真实数据可以传入几个List(如果使用sql语句的group by,将很方便),还有一个表头就可以了,如果有不同的需求可以修改下面的方法。
[code]
/**
* 2007, 北京, 2
* 2007, 上海, 2
* 2006, 广州, 6
* 2006, 南京, 7
* 2005, 湖南, 8
* 2005, 湖北, 9
* 2004, 天津, 3
* 2004, 海南, 7
* @param tableHead 纵轴的表头
* @param xlist 横轴
* @param ylist 纵轴
* @param reportList 记录数据
* @return
*/
public String[][] getReportArray(String tableHead, List xlist, List ylist, List reportList) {
int x_len = xlist.size();
int y_len = ylist.size();
//第一维数组为y轴,第二维数组为x轴
String[][] reportArray = new String[y_len + 2][x_len + 2];
reportArray[0][0] = tableHead;
reportArray[0][x_len + 1] = "总计";
for(int x = 1; x < x_len + 1; x++) {
reportArray[0][x] = (String) xlist.get(x - 1);
}
for(int y = 1; y < y_len + 1; y++) {
reportArray[y][0] = (String) ylist.get(y - 1);
}
int report_len = reportList.size();
double amount = 0;
double[] y_amount = new double[x_len + 2];
for(int y = 1; y < y_len + 1; y++) {
double x_count = 0;
for(int x = 1; x < x_len + 1; x++) {
for(int k = 0; k < report_len; k++) {
ReportBean reportBean = (ReportBean) reportList.get(k);
if(reportBean.getX().equals(xlist.get(x - 1)) && reportBean.getY().equals(ylist.get(y - 1))) {
String value = reportBean.getValue();
reportArray[y][x] = reportBean.getValue();
x_count += Double.parseDouble(value);
amount += Double.parseDouble(value);
}
}
//如果不存在数据,则为0
if(reportArray[y][x] == null) {
reportArray[y][x] = "0";
}
y_amount[x] += Double.parseDouble(reportArray[y][x]);
reportArray[y_len + 1][x] = y_amount[x] + "";
}
reportArray[y][x_len + 1] = x_count + "";
}
reportArray[y_len + 1][0] = "合计";
reportArray[y_len + 1][x_len + 1] = amount + "";
return reportArray;
}
[/code]
使用的是模拟数据迭代,真实数据可以传入几个List(如果使用sql语句的group by,将很方便),还有一个表头就可以了,如果有不同的需求可以修改下面的方法。
[code]
/**
* 2007, 北京, 2
* 2007, 上海, 2
* 2006, 广州, 6
* 2006, 南京, 7
* 2005, 湖南, 8
* 2005, 湖北, 9
* 2004, 天津, 3
* 2004, 海南, 7
* @param tableHead 纵轴的表头
* @param xlist 横轴
* @param ylist 纵轴
* @param reportList 记录数据
* @return
*/
public String[][] getReportArray(String tableHead, List xlist, List ylist, List reportList) {
int x_len = xlist.size();
int y_len = ylist.size();
//第一维数组为y轴,第二维数组为x轴
String[][] reportArray = new String[y_len + 2][x_len + 2];
reportArray[0][0] = tableHead;
reportArray[0][x_len + 1] = "总计";
for(int x = 1; x < x_len + 1; x++) {
reportArray[0][x] = (String) xlist.get(x - 1);
}
for(int y = 1; y < y_len + 1; y++) {
reportArray[y][0] = (String) ylist.get(y - 1);
}
int report_len = reportList.size();
double amount = 0;
double[] y_amount = new double[x_len + 2];
for(int y = 1; y < y_len + 1; y++) {
double x_count = 0;
for(int x = 1; x < x_len + 1; x++) {
for(int k = 0; k < report_len; k++) {
ReportBean reportBean = (ReportBean) reportList.get(k);
if(reportBean.getX().equals(xlist.get(x - 1)) && reportBean.getY().equals(ylist.get(y - 1))) {
String value = reportBean.getValue();
reportArray[y][x] = reportBean.getValue();
x_count += Double.parseDouble(value);
amount += Double.parseDouble(value);
}
}
//如果不存在数据,则为0
if(reportArray[y][x] == null) {
reportArray[y][x] = "0";
}
y_amount[x] += Double.parseDouble(reportArray[y][x]);
reportArray[y_len + 1][x] = y_amount[x] + "";
}
reportArray[y][x_len + 1] = x_count + "";
}
reportArray[y_len + 1][0] = "合计";
reportArray[y_len + 1][x_len + 1] = amount + "";
return reportArray;
}
[/code]
4万+

被折叠的 条评论
为什么被折叠?



