ワッシムAlsafwi:
私はこのようになりますことを、入力ファイルを持っています
@id1 1.2 3.4
@id2 6.8 8.1
@id3 1.5 9.4
@id4 5.9 2.7
私は2次元配列に数値を格納し、@idが含まれている第一の列を忘れるしたいと思います。私はまた、処理のためだけにストリームを使用します。
これまでのところ私は2つの方法を作りました。
第一の方法は、入力ファイルを読み取り、文字列の配列として、リスト内の各ラインを格納します。
private List<String[]> savefromfile(String filePath) throws IOException {
List<String[]> rowsOfFile = new LinkedList<String[]>();
try (Stream<String> lines = Files.lines(Paths.get(filePath))) {
lines.forEach(line -> {
String rows[] = line.trim().split("\\s+");
rowsOfFile.add(rows);
});
lines.close();
}
return rowsOfFile;
入力リストとして第2の方法取り、列だけ番号が含まれている2次元配列を返します。
private double[][] storeAllID(List<String[]> rowsOfFile) {
int numberOfID = rowsOfFile.size();
double[][] allID = new double[numberOfID][2];
int i = 0;
for (String[] line : rowsOfFile) {
double id[] = new double[2];
id[0] = Double.parseDouble(line[1]);
id[1] = Double.parseDouble(line[2]);
allID[i++] = id;
}
return allID;
}
このコードは、より効率的にする方法はありますか?私は、入力ファイルを読み込み、数字だけを含む2次元配列を返すだけ、短い方法をしたいです。私はそれがこれを行うには、コードの20行を記述する必要はないと思います。
vlumi:
あなたは本当ににおけるストリームの使用上の任意の利益を獲得していないsavefromfile
あなたはそれがforループ無地だったまさに同じようにそれを使用しているので、。コードビットクリーナーを作るために、あなたは完全にローカル変数を取り除くことができ、また、への呼び出しはclose()
すでに試し-と、リソースを使用しているとして不要です。
private List<String[]> savefromfile(String filePath) throws IOException {
try (Stream<String> lines = Files.lines(Paths.get(filePath))) {
return lines
.map(line -> line.trim().split("\\s+"))
.collect(Collectors.toCollection(LinkedList::new));
}
}
あなたがマップであなたのストリーム内のそれを行う可能性があるので、別の方法に[] []を倍増するために解析を分離する理由私は知りません。
private double[][] loadFromFile(String filePath) throws IOException {
try (Stream<String> lines = Files.lines(Paths.get(filePath))) {
return lines
.map(line -> line.trim().split("\\s+"))
.map(line -> new double[] {
Double.parseDouble(line[1]),
Double.parseDouble(line[2])
})
.toArray(double[][]::new);
}
}
パフォーマンスを得るために、あなただけの価値がさらに複雑になり、下位レベルのデータ型とループを使用している場合は自分自身で測定する必要があります。