如何按字段发出的事件分组?
How can I group by a field emitted events?
我有一个 class 用户:
class User {
String companyId;
}
和一家class公司:
class Company {
String id;
List<User> users;
}
我需要 "group" 由公司 Observable<User>
和 return 发出的用户 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>
。有什么运算符可以解决这个问题吗?
已解决!有一个 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);
}
});
我有一个 class 用户:
class User {
String companyId;
}
和一家class公司:
class Company {
String id;
List<User> users;
}
我需要 "group" 由公司 Observable<User>
和 return 发出的用户 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>
。有什么运算符可以解决这个问题吗?
已解决!有一个 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);
}
});