假设我有一个具有属性名称和高度的学生。
class Student{ String name; double height;}
如果我有一群学生的对象,我希望输出按照学生姓名的升序排序,那我该怎么做?
答案 0 :(得分:2)
假设您有一个学生对象数组,如下所示:
Student[] students = {studentObj1, studentObj2, studentObj3};
你只需要使用一个Comparator,它在Java 8 /反应式编程中可以用Flux提供的sort方法编写为lambda函数。
这里obj1和obj2是Student类的对象,它们相互比较。
obj1.compareTo(obj2)按升序对它们进行排序。
Flux.fromIterable (Arrays.asList(students)).sort( (obj1, obj2) -> obj1.getName().compareTo(obj2.getName()));
答案 1 :(得分:0)
可以接受answer,但我建议采用其他方式。
如果您拥有的是学生数组,则可以使用Arrays.sort进行排序,然后从排序后的数组中调用Flux.fromArray创建通量。
但是,如果您有一个Flux的学生,而不是数组,则Flux会有一个操作员专门负责该工作-Flux.collectSortedList
Flux studentFlux = Flux.just(studentOne,studentTwo);
studentFlux.collectSortedList((studentObj1, studentObj2) -> studentObj1.getName().compareTo(studentObj2.getName()))
答案 2 :(得分:0)
接受器answer可以工作,但是如果类有getter,也可以使用方法引用来代替滚动自己的编译器:
class Student {
String name;
double height;
public String getName() {
return name;
}
// more getters
}
您可以执行以下操作:
Flux.fromIterable(Arrays.asList(students)).sort(Comparator.comparing(Student::getName))