Collectors.groupingBy()メソッドについて
キーと値を対応させて管理させたいときによく使うのがCollector.groupingBy()ですが・・
これがなかなか手ごたえがありました。(一回全部書いて投稿したら送信エラーで全部ブログ消えたので
はてなブログのほうが手応えあったのは内緒・・・・・^^#)
Collector.groupingBy()は要するに指定された条件に従ってグルーピングを行う。←意味不明w
とりあえず構文はこうなってます
Collectors.groupingBy()
static <T,K> Collector<T,?,Map<K,List<T>>> groupingBy(Function<? super T,? extends K> classifier) static <T,K,A,D> Collector<T,?,Map<K,D>> groupingBy(Function<? super T,? extends K> classifier, Collector<? super T,A,D> downstream) static <T,K,D,A,M extends Map<K,D>> groupingBy(Function<? super T,? extends K> classifier, Supplier<M> mapFactory, Collector<? super T,A,D> downstream) Collector<T,?,M>
・・・・・・・・^^;
まぁまぁ気をとりなおして
こういうのは実際に書いたほうがわかりやすいからね!
Stream<String> stream1 = Stream.of("belle","akko","ami","bob","nao"); Map<String,List<String>) map = stream.collect(Collectors.groupingBy(S -> s.substring(0,1))); System.out.println(map); ///{a=[akko,ami],b=[belle,bob],n=[nao]} Stream<String> stream1 = Stream.of("belle","akko","ami","bob","nao"); Map<String,Set<String>) map1 = stream.collect(Collectors.groupingBy(S -> s.substring(0,1),Collectors.toSet())); System.out.println(map1); ///{a=[akko,ami],b=[belle,bob],n=[nao]} ///Map<String,List<String>がMap<String,Set<String>になる Stream<String> stream1 = Stream.of("belle","akko","ami","bob","nao"); Map<String,String) map1 = stream.collect(Collectors.groupingBy(S -> s.substring(0,1),Collectors.joining())); System.out.println(map1); ///{a=akkoami,b=bellebob,n=nao} ///Map<String,List<String>がMap<String,String>になる Stream<String> stream1 = Stream.of("belle","akko","ami","bob","nao"); Map<String,String) map1 = stream.collect(Collectors.groupingBy(S -> s.substring(0,1),TreeMap :: new,Collectors.joining())); System.out.println(map1); System.out.println(map1.getClass()); ///{a=akkoami,b=bellebob,n=nao} ///TreeMap型になる
Collectors.joining()
Collectors.toSet()
とかは完全にストリームのcollect()methodのためのメタ要員ですね・・・・
Javaの公式の偉い方たちが考えてるんで我々下々にはその中身を理解する必要はなく
とりあえず終端でcollect()が使いたかったら引数にCollectors.joining()とかぶっこんどけってことですよね。
自分のやりたい機能がなかったら自分で作れってこと
まぁ汎用性が高いものはすでにだれかが作ってるだろうし
所詮プログラムなんてこの程度なんだなって思った