私のプログラムは約2500語のファイルを処理します。 ファイルから両方の単語を含む行の数を取得します。 私はこれのために次のコードを書いています。このプログラムは走るのに約3時間かかります! 私の研究によると、ランタイムが高い理由はストリームを使用するためです。どのようにランタイムを減らすことができますか?java 8のランタイムを減らす
Stream<String> fileLines = Files.lines(ngramPath, Charset.defaultCharset());
Supplier<Stream<String>> SfileLines =() -> {
try {
return Files.lines(ngramPath);
} catch (IOException e) {
e.printStackTrace();
}
return fileLines;
};
while (reviews1.hasNext())
{
String term_i = reviews1.next();
reviews2= new Scanner(path);
while(reviews2.hasNext())
{
String term_j = reviews2.next();
if (!term_i.equals(term_j))
{
double pij = (double) SfileLines.get().filter(s -> s.contains(term_i+" ") & s.contains(term_j+" ")).count();
term_i_Ass.put(term_j, pij);
}
}
Total.put(term_i, term_i_Ass);
}
UPDATE:実行するためのより多くの時間を持っている部分は、次のコードです:
double pij = (double) SfileLines.get().filter(s -> s.contains(term_i+" ") & s.contains(term_j+" ")).count();
私はあまり時間を必要とし、別の方法、プログラムの次の行を記述する必要があります。
ファイルにあなたがを反復処理するたびに読んでいるように、それが見えますループ。 –
'&& 'を短絡する演算子' &&'を変更すると助けになるはずです。 – Eran
ファイルを一度 'List'に読み込み、 'List'をストリームします。 –
Eran