2D阵列或arraylist指的是excel单元格

时间:2015-04-16 14:32:06

标签: java excel

我有一张excel表,让我们说:

enter image description here

请注意,每个行和列都有自己的名称K,L ...和A,B ....还要注意每个单元格都有形式(int,int,int,int),据我所知很好地代表了一个arraylist。处理这个问题的最佳方法是什么;定义一个二维阵列的arraylists;或者是arraylists的arraylist;或者使用哈希映射;我发现使用二维阵列的arraylists以便运行循环更简单但是我必须将每个2D数组元素初始化为arraylist(或不是;)。请注意,它是一个很大的excel表(超过2500个单元格)。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果您需要快速随机访问,可以将HashMap与单元格密钥一起使用。

public class CellKey {
    final String col;
    final String row;

    private CellKey () {} // no instatiation outside

    public CellKey at(String row, String column) {
        this.col = column;
        this.row = row;
    } 

    public getColumn() {
        return col;
    }

    public getRow() {
        return row;
    }

    public int hashCode() {
        return Objects.hash(col, row);
    }

    public boolean equals(CellKey other) {
        return this.col.equals(other.col) && this.row.equals(other.row);
    }
}

现在在表示单元格值的集合中使用它:

Map<CellKey, List<Integer>> cells = new HashMap<>();

// get value
cells.get(CellKey.at(row, column));

// put value
cells.put(CellKey.at(row, column), value);
cells.put(CellKey.at(row, column), Arrays.asList(int1, int2, int3));

// check if value exists
cells.contains(CellKey.at(row, column));

// iterate over all cells containing values
cells.entrySet().stream().forEach(e -> {
    String row = e.getKey().getRow();
    String column = e.getKey().getColumn();
    List<Integer> value = e.getValue();
    // make your actions
});

// iterate over given row
String row = "K";
String[] columns = new String[]{"A", "B", "C", "D"};
for (String c : columns) {
   List<Integer> values = cells.get(CellKey.at(row, c));
   // perform actions
}