栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

用java实现的类似.net的DataTable(2)

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用java实现的类似.net的DataTable(2)

上篇: 用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();
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955091.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号