import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
final class Matrix {
private final List<List<Integer>> values;
Matrix(final List<List<Integer>> values) {
this.values = values;
}
List<MatrixCoordinate> getSaddlePoints() {
final List<MatrixCoordinate> result = new ArrayList<>();
if (values.isEmpty()) {
return result;
}
for (int row = 0; row < values.size(); row++) {
for (int column = 0; column < values.get(0).size(); column++) {
final int coordinateValue = values.get(row).get(column);
if (coordinateValue == getRowMax(row) && coordinateValue == getColumnMin(column)) {
result.add(new MatrixCoordinate(row, column));
}
}
}
return result;
}
private int getRowMax(final int row) {
return Collections.max(values.get(row));
}
private int getColumnMin(final int column) {
return values.stream()
.map(row -> row.get(column))
.min(Integer::compareTo)
.get();
}
}