代码之家  ›  专栏  ›  技术社区  ›  sameh

sql中group by的RxJava替代方案

  •  0
  • sameh  · 技术社区  · 8 年前

    我有一份 Student :

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

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

    如何做到这一点?

    1 回复  |  直到 8 年前
        1
  •  2
  •   akarnokd    8 年前

    使用 groupBy ,则, flatMap 和 count 关于小组本身:

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

    如果没有lambdas,看起来更难看:

    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;
                }
            });
        }
    });
    
    推荐文章