自定义类的Flux中的排序顺序

时间:2018-06-03 08:27:26

标签: reactive-programming project-reactor

假设我有一个具有属性名称和高度的学生。

class Student{ String name; double height;}

如果我有一群学生的对象,我希望输出按照学生姓名的升序排序,那我该怎么做?

3 个答案:

答案 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))