对流中的对象列表进行排序,并将 return 排序后的列表作为 flutter 中的流
Sort list of objects in a stream and return the sorted list as a stream in flutter
我有用户列表。我需要根据性别对这些用户数据进行排序。性别 = { 0: 'male', 1: 'female', 2: 'others'}.
我希望日期的排序方式是首先列出女性,然后是男性,然后是其他人,即 {1, 0, 2}。
class User {
String id;
String name;
int gender;
User({
this.id,
this.name,
this.gender,
})
factory users.fromMap(Map<String, dynamic> data, String documentId) {
if (data == null) {
return null;
}
return User(
...
);
}
Map<String, dynamic> toMap() => <String, dynamic>{
...
}
}
有没有办法根据上述条件对数据进行排序,再return一个stream?
我从数据库收到的流如下:
Stream<List<User>> users =
database.usersStream();
现在,用户对象可以使用 rxdart 排序还是有其他方法?
以及如何做到这一点?
您可以在 usersStream
方法中对列表进行排序。
请尝试以下步骤。
1。在您的 User
class 中实施 Comparable 并覆盖 compareTo
方法。
class User implements Comparable<User> {
String id;
String name;
int gender;
User({
this.id,
this.name,
this.gender,
});
@override
String toString() {
return "User(id: $id, gender: $gender)";
}
@override
int compareTo(User other) {
if (gender == 1) {
return -1;
}
if (other.gender == 1) {
return 1;
}
return gender.compareTo(other.gender);
}
}
2。使用 compareTo
方法对 usersStream
中的列表进行排序。
Stream<List<User>> usersStream() async* {
//This is dummy data for users.
List<User> users = List.generate(20, (index) {
Random random = Random();
int gender = random.nextInt(3);
return User(id: index.toString(), gender: gender, name: "User $index");
});
//Sorting the list.
users.sort((User a, User b) {
return a.compareTo(b);
});
yield users;
}
我有用户列表。我需要根据性别对这些用户数据进行排序。性别 = { 0: 'male', 1: 'female', 2: 'others'}.
我希望日期的排序方式是首先列出女性,然后是男性,然后是其他人,即 {1, 0, 2}。
class User {
String id;
String name;
int gender;
User({
this.id,
this.name,
this.gender,
})
factory users.fromMap(Map<String, dynamic> data, String documentId) {
if (data == null) {
return null;
}
return User(
...
);
}
Map<String, dynamic> toMap() => <String, dynamic>{
...
}
}
有没有办法根据上述条件对数据进行排序,再return一个stream?
我从数据库收到的流如下:
Stream<List<User>> users =
database.usersStream();
现在,用户对象可以使用 rxdart 排序还是有其他方法? 以及如何做到这一点?
您可以在 usersStream
方法中对列表进行排序。
请尝试以下步骤。
1。在您的 User
class 中实施 Comparable 并覆盖 compareTo
方法。
class User implements Comparable<User> {
String id;
String name;
int gender;
User({
this.id,
this.name,
this.gender,
});
@override
String toString() {
return "User(id: $id, gender: $gender)";
}
@override
int compareTo(User other) {
if (gender == 1) {
return -1;
}
if (other.gender == 1) {
return 1;
}
return gender.compareTo(other.gender);
}
}
2。使用 compareTo
方法对 usersStream
中的列表进行排序。
Stream<List<User>> usersStream() async* {
//This is dummy data for users.
List<User> users = List.generate(20, (index) {
Random random = Random();
int gender = random.nextInt(3);
return User(id: index.toString(), gender: gender, name: "User $index");
});
//Sorting the list.
users.sort((User a, User b) {
return a.compareTo(b);
});
yield users;
}