JavaのStreamで二つの配列から重複する要素を削除したり、独自クラスを色々する方法。ARTICLE【FE風花雪月】煤闇の章、ハードクラシック攻略4日目【ファイアーエムブレム】HOME技術系JavaのStreamで二つの配列から重複する要素を削除したり、独自クラスを色々する方法。JavaのStreamで二つの配列から重複する要素を削除したり、独自クラスを色々する方法。仕事で二つの配列から重複する要素を削除するStream処理を作った。その他Streamで独自クラスをあれこれする際に役に立った処理を紹介する。二つの配列から重複するものを削除する。APIとはそもそもStreamとは何か、こちらの記事が詳しくまとめている。APIとはJava8から追加されたAPIで、ざっくり言うといままでforとかで回す処理を書いていたものが、かなり簡単に書けるようになったというもの。後並列処理が簡単に書けるようになるらしいです。//中間処理}以下の様に書けるようになります。Arrays.asList(1,2,3);list.stream().//中間処理ちなみに、こちらの記事によると単純処理のパフォーマンスは良くならないというか、むしろ遅くなるようです。それぞれ書き方でどれほどパフォーマンスが違うのか?計測比較してみた。Streamとループとか普段使いでは気にするほどの速度ではないです。いえ最近はWebの高速化もSEOに影響してくるのでもし単純処理のループが多くなってくるようなら気にした方がいいかもです。複雑な並列処理を行う場合は当然並列で操作した方が速いと思うので、そこらへんは上手く使い分けないといけないかなと思います。(ただやっぱ並列処理は難しくてかえってパフォーマンス落ちることもあるので結局工数と相談になりそう・・・。)二つの配列から重複するものを削除する。今回行いたいのは、二つの配列から重複する要素を削除する処理。正解となるリストと、正誤入り混じったレスポンスが返ってくるような場合に使いたい。これが、従来の処理だと以下の様になる。[3,4,5]これをStreamでやると以下のようになる。[3,4,5]かなり見やすくなった。単純なのだが、forの動きに引っ張られてlist2をループしないといけないと思い詰まってしまったのでメモ。ちなみに、forの処理イメージに寄せて下の様に書くことも出来る。独自クラスを扱う場合には以下の方法を使うのがよさそう。[3,4,5]独自クラスを使っている場合に二重ループが必要だったりするケース独自クラスの中にループが二つあるとかの場合Streamを使うのがちょっと面倒。以下のような独自クラスがあるとします。companyId;}独自クラスHumanがあり、Listの中にさらにWorksという独自クラスが入ってる感じです。実際にこんな独自クラスがあったら怒られそうですがテストだし良い例が思いつかなかったから許して。例として以下の様にデータを突っ込みます。ArrayList();humans.add(human1);humans.add(human2);ここでcompanyに対して比較処理を入れたいとする。hoge会社に勤める人を見つけたい場合、従来のforを使った方法は以下の様になる。hogeoで、Streamを使うと以下の様になる。hogeoぶっちゃけ可読性が悪くなってきている。anyMatchはcontainsのようなもので、「一個でも含まれればtrueを返す」というもの。業務ではこれを使って、「hoge会社に勤める人だけを先頭に追加し、後ろにそれ以外の人を追加」のようなことを行った。実際に使ったのは以下のような方法。sortedHumans.add(human));allMatchは「全てに含まれればtrueを返す」というもの。containsAllとかそんな感じのメソッドと同じだったと思う。そのため、hogeと比較して論理演算子!(否定)を入れて、「全てにhogeが含まれなければtrue」という条件にマッチしたら追加してます。今回の例だと特に並びは変わらないが、色々文字をいじると実際に並び順が変わることが分かってもらえると思う。(hogeは実際にはマジックナンバーなのでどっかに定数化するか変数にぶちこんでやったと思いますが今回書いてるときはべた書きしてしまいました許して。)まとめ業務で沢山Streamを使う機会があって勉強になったので誰かの役に立てば&メモとして。Streamって新人が勉強するのは結構難しいという問題があると思います。forって直感的で分かりやすいんだなぁと今更ながら思いました。慣れてない人は最初は無理にStreamやるよりforでやってなれたらStreamとか触れるのがいいかもですね。前の記事ジェイソンやdbdで超プレイを魅せるゲーム実況者・ポポリ氏についてまとめ。【ブログ報告】開設五か月のブログ状況とかまとめてみた。某配送システム白猫プロジェクトのアイシャが大好きなエンジニアの卵。Java/Shell/C++/HTML/Sass/rustかgoやりたい。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。WordPress.。