package com.baselet.control; import java.util.ArrayList; import java.util.List; public class Matrix<T> { private List<List<T>> matrix = new ArrayList<List<T>>(); /** * @return the row size */ public int rows() { return matrix.size(); } /** * @return the column size */ public int cols() { int longestCol = 0; for (List<T> row : matrix) { if (row.size() > longestCol) { longestCol = row.size(); } } return longestCol; } public List<T> row(int index) { return matrix.get(index); } public List<T> col(int index) { List<T> result = new ArrayList<T>(cols()); for (List<T> row : matrix) { if (index < row.size()) { result.add(row.get(index)); } else { result.add(null); } } return result; } public T cell(int row, int col) { return row(row).get(col); } public boolean hasMoreRowsThanCols() { return rows() > cols(); } public void invert() { List<List<T>> result = new ArrayList<List<T>>(cols()); for (int i = 0; i < cols(); i++) { result.add(col(i)); } matrix = result; } public void addLine(List<T> line) { matrix.add(line); } public boolean isEmpty() { for (List<T> row : matrix) { if (!row.isEmpty()) { return false; } } return true; } @Override public String toString() { StringBuilder sb = new StringBuilder(""); for (List<T> row : matrix) { for (T value : row) { sb.append(value != null ? value : "null").append("\t"); } sb.append("\n"); } return sb.toString(); } }