上篇: 用JAVA实现类似.net的DataTable(1)
https://blog.csdn.net/zheyiw/article/details/110739616
DataColumn.java
package com.yihujiu.util.table; import org.json.JSONArray; import org.json.JSONException; import java.util.ArrayList; import java.util.HashMap; import java.util.ListIterator; public class DataColumn extends ArrayList{ private static final long serialVersionUID = -7806675152861839553L; public static enum ColType { String, Numeric } // 默认值 private HashMap mapDefaultValue = new HashMap (); // 列类型 private HashMap mapColType = new HashMap (); // 列位置 private HashMap mapColIndex = new HashMap (); public DataColumn() { super(); } public DataColumn(JSONArray arrObj) throws JSONException { int len = arrObj.length(); for (int i = 0; i < len; i++) { add(arrObj.optString(i)); } } public DataColumn(ArrayList list) { for (int i = 0; i < list.size(); i++) { add(list.get(i)); } } public int getIndex(String columnName) { return mapColIndex.get(toLowerCase(columnName)); } //重写新增元素方法 @Override public boolean add(String columnName) { if (contains(columnName)) { return false; } boolean result = super.add(toLowerCase(columnName)); if (result) { refreshColIndex(); } return result; } @Override public void add(int index, String columnName) { if (contains(columnName)) { return; } super.add(index, toLowerCase(columnName)); refreshColIndex(); } public boolean add(String columnName, String defaultValue) { if (add(toLowerCase(columnName))) { mapDefaultValue.put(toLowerCase(columnName), defaultValue); return true; } else { return false; } } private void refreshColIndex() { //重新获取列索引 mapColIndex.clear(); ListIterator it = super.listIterator(); int i = 0; while (it.hasNext()) { mapColIndex.put(((String) it.next()).toLowerCase(), i); i++; } } //获取默认值 public String getDefaultValue(int index) { return mapDefaultValue.get(get(index)); } public String getDefaultValue(String columnName) { String defaultValue = mapDefaultValue.get(toLowerCase(columnName)); if (null == defaultValue) { defaultValue = ""; } return defaultValue; } public void setDefaultValue(String columnName,String defaultValue) { mapDefaultValue.put(toLowerCase(columnName), defaultValue); } //设置列类型,方便排序等操作 public ColType getColType(String columnName) { return mapColType.get(toLowerCase(columnName)); } public void setColType(String columnName, ColType type) { mapColType.put(toLowerCase(columnName), type); } public void setColType(int index, ColType type) { mapColType.put(get(index), type); } private String toLowerCase(String columnName) { if (null == columnName) { columnName = ""; } return columnName.toLowerCase(); } }
DataRow.java
package com.yihujiu.util.table;
import org.json.JSONArray;
import java.math.BigDecimal;
import java.util.ArrayList;
public class DataRow extends ArrayList {
private static final long serialVersionUID = 1246271586128482124L;
// table的一个引用
private DataTable table;
public DataRow(DataTable table) {
super();
this.table = table;
for (String columnName : table.columns) {
String defaultValue = table.columns.getDefaultValue(columnName);
this.add(defaultValue);//有添加一个默认值,没有添加一个"";
}
}
public DataRow(DataTable table, JSONArray jsonArray) {
super();
this.table = table;
int len = jsonArray.length();
for (int i = 0; i < len; i++) {
add(jsonArray.optString(i));
}
}
public DataRow(DataTable table, ArrayList list) {
super();
this.table = table;
for (String str : list) {
add(str);
}
}
public DataRow(DataTable table, DataRow dr) {
this.table = table;
for (String str : dr) {
add(str);
}
}
public DataRow copy(DataTable dt) {
return new DataRow(dt, this);
}
public DataColumn getColumns() {
return table.columns;
}
public String set(int index, String value) {
return super.set(index, value);
}
public String set(String columnName, String value) {
try {
return set(getColumnIndex(columnName), value);
} catch (Exception e) {
// 一般是没有找到列,导致报错
return "";
}
}
public String get(String columnName) {
try {
return get(getColumnIndex(columnName));
} catch (Exception e) {
// 一般是没有找到列,导致报错
return "";
}
}
public String showAll() {
String str = "";
for (int i = 0; i < size(); i++) {
str += get(i) + ";";
}
return str;
}
public int getInt(int index) {
return toInt(get(index));
}
public int getInt(String columnName) {
return toInt(get(columnName));
}
public double getDouble(String columnName) {
return toDouble(get(columnName));
}
public String getIntStr(String columnName) {
return toInt(get(columnName)) + "";
}
// 获取列的序号
private int getColumnIndex(String columnName) {
return table.columns.getIndex(columnName);
}
// ---------------------工具---------------------------
public static int toInt(String strNumber) {
return (int) Math.floor(toDouble(strNumber));
}
public static double toDouble(String strNumber) {
try {
BigDecimal big = new BigDecimal(strNumber);
return big.doubleValue();
} catch (Exception e) {
return 0;
}
}
}
DataRowCollection.java
package com.yihujiu.util.table; import java.util.ArrayList; // 数据列表,行的有序集合 public class DataRowCollection extends ArrayList{ private static final long serialVersionUID = -4052603768143682140L; private DataTable table; public DataRowCollection(DataTable table) { this.table = table; } public DataTable getTable() { return table; } @Override public boolean add(DataRow dr) { return super.add(dr.copy(table)); } public int getSize() { return size(); } }



