もっと Lambda その10
もっと Lambda シリーズも今回で10回目になりました。
と言っても大した内容ではないので恐縮です。
私のモットーは「門前の小僧習わぬ経を読む」ですから気にせずガンガンいっちゃいます!
今回はストリームオブジェクトの重複要素を排除して新たにストリームオブジェクトを作り直す便利な方法を紹介します。
とても簡単なので覚えておいて損はないと思います。
では、非常にシンプルなプログラムをご覧ください。
1 2 3 4 5 6 7 8 9 10 11 12 |
package jp.yucchi.trydistinct; import static java.util.Arrays.stream; public class TryDistinct { public static void main(String[] args) { String[] works = {"HONDA", "HONDA", "TOYOTA", "TOYOTA", "TOYOTA", "NISSAN", "MAZUDA"}; stream(works).distinct().forEach(System.out::println); } } |
distinct() メソッドが重複排除して新たなストリームオブジェクトを返してくれるんですねぇ~(^_^)
たったこれだけです!
distinct()
ava.util.stream.Stream
public Stream<T> distinct()
Returns a stream consisting of the distinct elements (according to Object.equals(Object)) of this stream.
This is a stateful intermediate operation.
戻り値:
the new stream
実行結果は次のようになります。
HONDA
TOYOTA
NISSAN
MAZUDA
便利だね。
調子に乗って二つのリストオブジェクトを結合して重複要素を排除して新たにストリームオブジェクトをつくってみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package jp.yucchi.tryunion; import static java.util.Arrays.asList; import java.util.List; import java.util.stream.Stream; import static java.util.stream.Streams.concat; public class TryUnion { public static void main(String[] args) { List idol_1 = asList("喜屋武ちあき", "櫻井里佳", "谷澤恵里香", "倉持明日香","戸田恵梨香", "新垣結衣"); List idol_2 = asList("吉高由里子", "宮崎あおい", "篠田麻里子", "戸田恵梨香", "新垣結衣"); Stream allIdol = concat(idol_1.stream(), idol_2.stream()); allIdol.distinct().forEach(System.out::println); } } |
実行結果は次のようになります。
喜屋武ちあき
櫻井里佳
谷澤恵里香
倉持明日香
戸田恵梨香
新垣結衣
吉高由里子
宮崎あおい
篠田麻里子
ちなみに distinct() メソッド無しだと重複要素は排除されません。
Java8 が正式リリースされて何らかの理由によって Java7 を使わなくてはいけない状況があるとすればそれは気の毒としか言いようがないですね。
TAGS: Java | 2013年5月27日4:01 AM
Trackback URL