2017-01-23 31 views
0

我有一類用戶:如何根據場發射事件進行分組?

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); 
     } 
    }); 
} 

它的工作原理,但它只是通過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); 
       } 
      }); 
相關問題