Сортированный порядок во Flux пользовательского класса - PullRequest
0 голосов
/ 03 июня 2018

Предположим, у меня есть класс Student с атрибутами name и ростом.

class Student{ String name; double height;}

Если у меня есть поток объектов студентов, и я хочу, чтобы выходные данные были отсортированы в порядке возрастания имени студента,тогда как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Принято ответ в порядке, но я бы предложил другой способ.

Если у вас есть массив студентов, то вы можете просто отсортировать, используя Arrays.sort и затем создайте Flux из отсортированного массива, вызывая Flux.fromArray .

Но если у вас есть Flux ученика, а не массива, у Flux есть оператор, который выполняет эту работу специально- Flux.collectSortedList

Flux studentFlux = Flux.just(studentOne,studentTwo);
studentFlux.collectSortedList((studentObj1, studentObj2) -> studentObj1.getName().compareTo(studentObj2.getName()))
0 голосов
/ 16 января 2019

Accepter answer работает, но вместо того, чтобы сворачивать свой собственный компаратор, вы также можете использовать ссылки на методы, учитывая, что класс имеет геттеры:

class Student { 
   String name; 
   double height;

   public String getName() {
      return name;
   }

   // more getters
}

Затем вы можете сделать:

Flux.fromIterable(Arrays.asList(students)).sort(Comparator.comparing(Student::getName))
0 голосов
/ 03 июня 2018

Предположим, у вас есть массив ученических объектов следующим образом:

Student[] students = {studentObj1, studentObj2, studentObj3};

Вам просто нужно использовать Comparator, который в Java 8 / реактивное программирование можно записать как лямбда-функцию, в sort метод, предоставленный Flux.

Здесь obj1 и obj2 - это объекты класса Student, которые сравниваются друг с другом.

obj1.compareTo (obj2) сортирует их в порядке возрастания.

Flux.fromIterable (Arrays.asList(students)).sort( (obj1, obj2) -> obj1.getName().compareTo(obj2.getName()));
...