質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

310閲覧

Javaの forEach って、コレクションのメソッドと、Stream のメソッド、どちらを使えばいいですか?

nobadag

総合スコア37

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/03/21 05:42

Javaの、forEach で、コレクションクラスの、forEach か、Stream の、forEach を使うか、迷っています。
速さや、違いなどをご教授して頂きたいです。

このようなコードがあるとして、

Java

1ArrayList<String> list = new ArrayList<String>(); 2 3list.add("Orange"); 4list.add("Apple"); 5list.add("Grape"); 6list.add("Peach");

コレクションか

Java

1list.forEach(System.out::println); // コレクションのメソッドを使う

Stream か

Java

1list.stream().forEach(System.out::println); // Stream のメソッドを使う

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

解決しました

jimbeさんのおっしゃる通りに、自分で計測してみました。

Java

1import java.util.*; 2import java.util.stream.*; 3 4class Foreach { 5 public static void main(String[] args) { 6 List<Double> list = Stream.generate(Math::random).limit(10000).collect(Collectors.toList()); 7 8 // コレクション 9 long startTime1 = System.nanoTime(); 10 11 list.forEach(System.out::println); 12 13 long endTime1 = System.nanoTime(); 14 15 // Stream 16 long startTime2 = System.nanoTime(); 17 18 list.stream().forEach(System.out::println); 19 20 long endTime2 = System.nanoTime(); 21 22 // parallelStream 23 long startTime3 = System.nanoTime(); 24 25 list.parallelStream().forEach(System.out::println); 26 27 long endTime3 = System.nanoTime(); 28 29 System.out.println("コレクション・処理時間:" + (endTime1 - startTime1) + " ナノ秒"); 30 System.out.println("Stream・処理時間:" + (endTime2 - startTime2) + " ナノ秒"); 31 System.out.println("parallelStream・処理時間:" + (endTime3 - startTime3) + " ナノ秒"); 32 } 33}

このようなコードで計測してみたところ、結果は、

コレクション・処理時間:1893574557 ナノ秒 Stream・処理時間:1375210846 ナノ秒 parallelStream・処理時間:1233031096 ナノ秒

でした。
私のPCは、低スペックなので、わかりませんが、Stream を使用したほうが速いとわかりました。
また、並列処理にするとちょっと速くなりました。

何回か計測したのですが、すべて Stream に軍配が上がりました。
御回答ありがとうございました。

投稿2019/03/24 07:48

nobadag

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/03/24 08:16

条件はいろいろあるかもしれませんが, 目安の一つとして人に言える結果ではないでしょうか^^
nobadag

2019/03/24 08:43

ありがとうございます! 初めての高評価なのでうれしいです。
guest

0

forEachするだけなら、並列操作するのでない限り、streamをかませるメリットは皆無。

投稿2019/03/21 07:45

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

4件程度の, しかも処理が println であれば, どちらでも良いように思います.
数万件単位になれば早さには違いが出てくるかもしれませんので, 実際にやってみることをお勧め致します.

投稿2019/03/21 06:23

jimbe

総合スコア12648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobadag

2019/03/24 07:49

ベストアンサーにすることは、できなかったのですが、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問