Skip to content

Commit

Permalink
refactor reader to use 2D array
Browse files Browse the repository at this point in the history
  • Loading branch information
salemsd committed Feb 3, 2025
1 parent a127a02 commit 129d4b2
Showing 1 changed file with 22 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream;

public class ArrowReader {
private static final int ROW_COUNT = 8961;

public static Matrix readMatrixFromArrow(Path filePath) throws IOException {
Objects.requireNonNull(filePath);

Expand Down Expand Up @@ -59,29 +59,32 @@ public static Matrix readMatrixFromTxt(Path filePath) throws IOException {

var firstLine = iterator.next();
var columnCount = firstLine.split("\\s+").length;
var data = new ArrayList<List<Double>>(columnCount);
for (var i = 0; i < columnCount; i++) {
data.add(new ArrayList<>());
}
var data = new double[columnCount][ROW_COUNT];

fillDataList(firstLine, iterator, data);

var columns = new ArrayList<MatrixColumn>(data.size());
for (int j = 0; j < data.size(); j++) {
columns.add(new MatrixColumn("Column" + j, data.get(j).stream().mapToDouble(Double::doubleValue).toArray()));
var columns = new ArrayList<MatrixColumn>(data.length);
for (int j = 0; j < data.length; j++) {
columns.add(new MatrixColumn("Column" + j, data[j]));
}

return new Matrix(columns);
}
}

private static void fillDataList(String firstLine, Iterator<String> iterator, List<List<Double>> data) {
Stream.concat(Stream.of(firstLine), Stream.generate(iterator::next).takeWhile(x -> iterator.hasNext()))
.map(line -> line.split("\\s+"))
.forEach(values -> {
for (var j = 0; j < values.length; j++) {
data.get(j).add(Double.parseDouble(values[j]));
}
});
private static void fillDataList(String firstLine, Iterator<String> iterator, double[][] data) {
var rowIndex = 0;
while (iterator.hasNext()) {
String[] values;
if (rowIndex == 0) {
values = firstLine.split("\\s+");
} else {
values = iterator.next().split("\\s+");
}
for (var j = 0; j < values.length; j++) {
data[j][rowIndex] = Double.parseDouble(values[j]);
}
rowIndex++;
}
}
}

0 comments on commit 129d4b2

Please sign in to comment.