0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Java8】 Collection(List, Map, etc.)を舐めるからといって何でもかんでもstream.mapしないでくだしあ>< dear netbeans

Last updated at Posted at 2017-03-03

なんでこんなん書いたし

業務で初めてJava8を使いました。(以前の投稿から1年以上経ってます…)
初めてNetbeansというIDEを使いました(今までは基本Visual Studio、まれにeclipseです)。
Netbeansの補完機能により、forループがstream API形式に書き換わります。
流石にちょっとこれはないでしょと思うコードが生成されることがあります。

もともとのコード

擬似コードです。


List<ObjectA> objAList = func();
List<ObjectB> objBList = new List<>();
for (ObjectA objA: objAList) {
    ObjectB objB = convertToObjB(objA);
    objBList.add(objB);
}

NetBeansさんのヒントに従う

相変わらず擬似コードです

List<ObjectA> objAList = func();
List<ObjectB> objBList = objAList.stream()
	.map((objA) -> {
		ObjectB objB = convertToObjB(objA);
		return objB;
	}). forEachOrdered((objB) -> {
		objBList.add(objB);
	});

私はこうしてほしい

相変わらず擬似ry
そうそう、これも問題があって、convertToObjBが新たに検査例外吐くように修正されたらこのコードコンパイルエラーなんで。
正直for-inで書いたところを何でもかんでもStream APIで置き換えるのは間違ってます。

List<ObjectA> objAList = func();
List<ObjectB> objBList = objAList.stream()
	.collect(
		() -> new List<ObjectB>(),
		(list, objA) -> {
			ObjectB objB = convertToObjB(objA);
			list.add(objB);
		},
		(l,r) -> l.addAll(r)
	);

結論

ヒントは絶対に従おうっていうコーディング規約が悪いんですが、
ヒントに従うならその自動置換で生成されたコードの意味、あるいは気持ち悪いかどうかもちゃんと考慮してくださいな。
Javascriptの経験しかなく、そのノリで書いちゃったとかほんとにやめてくだしあ><。

ちなみに

何でもかんでもArrayList, HashMapもやめてくだしあ><
順序めちゃくちゃになるのほんと怖い。

LinkedListとかLinkedHashMapとかあるんで順序が重要な場合はこれ使ってよ。
順序関係ない場合はもしかしたらHashSetとか使えるかもしれないんで
何でもかんでも重複除去処理とかかかないでよ〜〜〜〜〜(; ;)

0
1
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?