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

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

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

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

Q&A

解決済

2回答

4284閲覧

Java8のStreamを使用してfor文をなくす手段

satoT

総合スコア7

Java

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

0グッド

0クリップ

投稿2016/05/13 08:36

編集2016/05/15 04:01

###前提・実現したいこと
java8でのStreamの使い方についての質問です

createHogeKeyでdto.getId()をいれてkeyを作成して
そのKeyをもとにhogeDao.select(hogeKey)で
データベースからの戻り値を入手しhogeListにいれ
その値の一部をcopyで変換してkekkaListにいれる。

###発生している問題・エラーメッセージ
for文をStreamに変えるにはどうしたらいいのでしょうか

###該当のソースコード
List<String> kekkaList = new ArrayList<String>();
for (testDto dto : testList) {
hogeKey = createHogeKey(dto.getId());
hogeList = hogeDao.select(hogeKey);
kekkaList.add(copy(dto, hogeList));
}
###試したこと
課題に対してアプローチしたことを記載してください
kekkaList.stream()
.map(cnt -> createHogeKey(dto.getId()));
続けて記述のしかたや、戻り値がない終わり方のためここからよくわかりません。

すいません、試したことの記述がおかしかったので修正しました。

###補足情報(言語/FW/ツール等のバージョンなど)
java8

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

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

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

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

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

RyotaKondo

2016/05/13 09:50

回答者として未知の情報が多すぎて答えようが無いです。「実現したいこと」に記述されていることをもう少し詳しくお願いします。また、「試したこと」の内容も元のコードと違いすぎてよくわからないです(testListとcntListはおなじもの?genMstDivKeyは元のコードに無いのだけども?)
swordone

2016/05/13 13:36

copy(dto, hogeList)のdtoは必要ですか?
satoT

2016/05/15 04:00

すいません、試したことの記述が間違っていたため修正しました。 copy(dto, hogeList)のdtoは必要ですが、これはkekkaListの中のdtoになります。 すいません、ちょっと例がまずかったようなのでもう少し質問内容を精査します。
guest

回答2

0

ストリームの処理から何か結果を得るには、終端処理というのが必要になります。
例えば、forEachメソッドでは、結果に対してfor文と同じようなことができます。
reduceメソッドは結果のコレクションを集約した結果を得ます。

ストリームを再びコレクションとして取得するには、collectメソッドを使います。
このメソッドは、通常Collectorsというユーティリティークラスと合わせて使います。

Collectors.toListメソッドを使えば、ストリームの処理結果をListで取得できます。

forEach,reduce,collectはいずれも終端処理のメソッドです。)

ちょっと簡略化したバージョンで書いてみるとこうなります。

lang

1// import java.util.*; 2// import java.util.stream.Collectors; 3 4public static void main(String[] args) { 5 List<Integer> testList = Arrays.asList(1, 2, 3); 6 List<String> kekkaList = testList.stream().map(id -> { 7 return genMstDivKey(id); 8 }).collect(Collectors.toList()); 9} 10 11static String genMstDivKey(int id) { 12 return "ID" + id; 13}

投稿2016/05/13 09:24

argius

総合スコア9390

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

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

0

ベストアンサー

もともとのfor文をそっくりそのまま活かすなら…

java

1List<String> kekkaList = testList.stream().map(dto -> { 2 型名 hogeKey = createHogeKey(dto.getId()); 3 List<型名> hogeList = hogeDao.select(hogeKey); 4 return copy(dto, hogeList); 5}).collect(Collectors.toList());

投稿2016/05/13 15:00

swordone

総合スコア20651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問