2017-02-03 4 views
0

私は文字列の値が少なく、その文字列に基づいていくつかのファイルをダウンロードする必要があります。これをjava8で行う最も効率的な方法は何でしょうか。ファイルをダウンロードするjava8ストリームの効率的な方法

List<String> keyValues = Arrays.asList("key1", "key2", "key3","key4"); 
keyValues.stream().forEach(i -> (FileUtils.copyURLToFile(new URL(urlStr + i), new File(filePath + i)))); 

"の引数には適用されません((I) - > {})" とのforEachは、エラーを与えているすべてのヘルプは高く評価される

。ありがとう。

+1

を参照してください[この答え](http://stackoverflow.com/a/24147329/2711488)。しかし、構文を修正した後でさえ、 'copyURLToFile'がチェックされた例外を宣言するなら、それは動作しません。 – Holger

答えて

0
その興味深い

が、1本の関数にラインとラムダからその関数を呼び出すことがfine..Referブログを動作することをputing:http://blog.agiledeveloper.com/2015/06/lambdas-are-glue-code.html明らか

operatorKeys.forEach(i -> downloadFile(i)); 

適切なのtry/catchのbloacksで囲む。..

+0

これを行うなら、代わりにメソッド参照を使うことができます: 'forEach(this :: download)' – Bohemian

2

あなたのラムダ周りからブラケットを取り外します

keyValues.forEach(i -> FileUtils.copyURLToFile(new URL(urlStr + i), new File(filePath + i))); 

私の推測では、コールの周りに括弧があなたの代わりに、消費者としての機能を持っている考えにコンパイラを混乱さです。

stream()を呼び出す必要はありません。あなたはコレクションから直接.forEach()を呼び出すことができます。

+2

コンパイラは混乱しません。かっこ内の式は常に式であり、ステートメントではありません。だから、それは消費者になることはできません。 'param - > methodInvocation'フォームは、呼び出しが文と式の両方であるため動作します。したがって、コンパイラは厳密にルールに従っています。括弧で囲まれた式の無効は、ここで議論されています(http://stackoverflow.com/a/24147329/2711488)、有効な式文はここにあります[http://stackoverflow.com/a/41483237/2711488 )。 – Holger

+0

@Holger "confused"はフレーズのターンでした。もちろん、無生物の決定的なプログラムを混乱させることはできません。しかし、リンクをありがとう。 – Bohemian

+0

あなたの説明のためにHolgerとBohemianに感謝しますが、何も機能しません。次に、http://blog.agiledeveloper.com/2015/06/lambdas-are-glue-code.htmlを参照して、その1行を関数の中に入れて、lamda内の関数を呼び出すようにしてみました。 – Manvi

関連する問題