2017-01-23 6 views
0

У меня есть класс User:Как я могу группировать полевые события?

class User { 
    String companyId; 
} 

и класс Компания:

class Company { 
    String id; 
    List<User> users; 
} 

Мне нужно «группа» Пользователи, испускаемый Observable<User> компании и вернуть Observable<Company>. У меня есть следующее:

public Observable<Company> getCompanies(Observable<User> users) { 
    return users.distinct(new Func1<User, String>(){ 
     @Override 
     public String call(User user) { 
      return user.companyId; 
     } 
    }).map(new Func1<User, Company>(){ 
     @Override 
     public Company call(User user) { 
      return new Company(user.companyId); 
     } 
    }); 
} 

Это работает, но он просто становится отличным пользователем компании. Мне нужно установить List<User> каждой компании. Есть ли какой-нибудь оператор, который я могу использовать для решения этой проблемы?

ответ

1

Решенный! Существует оператор groupBy -.- «

public Observable<Company> getCompanies(Observable<User> users) { 
    return users.groupBy(new Func1<User, String>(){ 
     @Override 
     public String call(User user) { 
      return user.companyId; 
     } 
    }).flatMap(new Func1<GroupedObservable<String, User>, Observable<List<User>>>() { 
       @Override 
       public Observable<List<User>> call(GroupedObservable<String, User> grouped) { 
        return grouped.toList(); 
       } 
      }, new Func2<GroupedObservable<String, User>, List<User>, Company>() { 
       @Override 
       public Company call(GroupedObservable<String, User> grouped, List<User> users) { 
        return new Company(grouped.getKey(), users); 
       } 
      }); 

 Смежные вопросы

  • Нет связанных вопросов^_^