java RxのgroupByが,groupっつってんのにKey / ValueのHashMapをすなおに返す方法がなさそう(途中で止まってしまう)ので,いったん配对の列表の形でtoList()。to

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java RxのgroupByが,groupっつってんのにKey / ValueのHashMapをすなおに返す方法がなさそう(途中で止まってしまう)ので,いったん配对の列表の形でtoList()。to相关的知识,希望对你有一定的参考价值。


import java.util.AbstractMap;
import java.util.HashMap;
import java.util.List;

import rx.Observable;
import rx.functions.Func1;
import rx.functions.Func2;
import rx.observables.GroupedObservable;


    /**
     * Observableの中身を指定のgrouperでgroupByして、HashMapに入れて返します。
     * @param observable
     * @param grouper
     * @param <K> groupByのキーの型
     * @param <V> groupByの値の型
     * @return HashMap(キーごとに対応する値のListが入っている)
     * @see <a href="http://stackoverflow.com/a/33234243">参考リンク</a>
     */
    /**
     * Observableの中身を指定のgrouperでgroupByして、HashMapに入れて返します。
     * @param observable
     * @param grouper
     * @param <K> groupByのキーの型
     * @param <V> groupByの値の型
     * @return HashMap(キーごとに対応する値のListが入っている)
     * @see <a href="http://stackoverflow.com/a/33234243">参考リンク</a>
     */
    public static <K, V> HashMap<K, List<V>> groupBy(Observable<V> observable, Func1<V, K> grouper) {
        HashMap<K, List<V>> result = observable.groupBy(grouper)
                .flatMap(new Func1<GroupedObservable<K, V>, Observable<AbstractMap.SimpleEntry<K, List<V>>>>() {
                    @Override
                    public Observable<AbstractMap.SimpleEntry<K, List<V>>> call(final GroupedObservable<K, V> grouped) {
                        return grouped.toList().map(new Func1<List<V>, AbstractMap.SimpleEntry<K, List<V>>>() {
                            @Override
                            public AbstractMap.SimpleEntry<K, List<V>> call(List<V> list) {
                                return new AbstractMap.SimpleEntry<>(grouped.getKey(), list);
                            }
                        });
                    }
                })
                .reduce(new HashMap<K, List<V>>(),
                        new Func2<HashMap<K, List<V>>, AbstractMap.SimpleEntry<K, List<V>>, HashMap<K, List<V>>>() {
                            @Override
                            public HashMap<K, List<V>> call(HashMap<K, List<V>> result, AbstractMap.SimpleEntry<K, List<V>> entry) {
                                result.put(entry.getKey(), entry.getValue());
                                return result;
                            }
                        })
                .toBlocking()
                .single();
        return result;
    }

以上是关于java RxのgroupByが,groupっつってんのにKey / ValueのHashMapをすなおに返す方法がなさそう(途中で止まってしまう)ので,いったん配对の列表の形でtoList()。to的主要内容,如果未能解决你的问题,请参考以下文章

ruby 実行した环境のOSがWindows?

text lazyloadでアンカーの位置がずれる

javascript 配列に特定の要素があるか调べる

javascript lazyloadでアンカーの位置がずれる

css 表で宽度が反映されない场合の対处

sh 庆典の履歴展开が,AGに渡したい正规表现の否定先読みと冲突する