【问题标题】:RxJava alternative of group by in sqlsql 中 group by 的 RxJava 替代方案
【发布时间】:2018-03-21 05:03:02
【问题描述】:

我有Student的列表:

Observable<Student> source = Observable.fromIterable(getStudentList());

我想按邮政编码对它们进行分组,以及它们出现的次数,但问题是我使用的是 java 7

如何做到这一点?

【问题讨论】:

    标签: reactive-programming java-7 rx-java2


    【解决方案1】:

    在组本身上使用groupByflatMapcount

    source.groupBy(s -> s.postalCode)
    .flatMapSingle(g -> 
        g.count()
        .map(v -> g.getKey() + ": " + v))
    ;
    

    如果没有 lambda,它看起来更丑:

    source.groupBy(new Function<Student, String>() {
        @Override public String apply(Student s) {
            return s.postalCode;
        }
    })
    .flatMapSingle(new Function<GroupedObservable<String, Student>, Single<String>>() {
        @Override public String apply(final GroupedObservable<String, Student> group) {
            return group.count().map(new Function<Long, String>() {
                @Override public String apply(Long count) {
                     return group.getKey() + ": " + count;
                }
            });
        }
    });
    

    【讨论】:

    • 之后我必须实现订阅?
    • 实际上,您可以保持原样,因为它本身就是一种美,而 StackOverflow 不允许我只评论“是”。
    • 它不起作用,它在我的 intelliJ 中用红色下划线,不兼容的类型:需要:java.lang.string found:io.reactivex.single
    • 更新了答案。
    • 我还有一个问题,如果我想访问邮政编码 900 的学生列表,并且我想修改例如每个学生的姓名,该怎么做?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    相关资源
    最近更新 更多