code: public <R> Matrix<R> runForEach(ParametrizedFunction<MatrixElement<E>, R> function, Object... args) {
  		Matrix<R> ret;
  		try {
  			ret = new Matrix<>(this.columns.size(), this.columns.get(0).size());
  		} catch (Exception ignored) {
  			ret = new Matrix<>();
  		}
  		for (int x = 0; x < this.columns.size(); x++) {
  			ArrayList<E> col = this.columns.get(x);
  			for (int y = 0; y < col.size(); y++) {
  				if (col.get(y) == null) continue;
  				R obj = function.apply(this.getElement(x, y), args);
  				ret.set(obj, x, y);
  			}
  		}
  		return ret;
  	}
docs: Runs a {@link ParametrizedFunction} for each element of the matrix, using these arguments:
  <ol>
  <li>X Coordinate in the matrix</li>
  <li>Y Coordinate in the matrix</li>
  <li>{@code args}, at the end</li>
  </ol>
  
  @param function The ParametrizedFunction to run for each element
  @param args     The arguments to add at the end of the function's params
  @param <R>      The return value for the function. Must be the same as the return value of {@code function}
  @return A list containing all the return values