Przypuśćmy, że mam studenta klasy z nazwą i wysokością atrybutów.

class Student{ String name; double height;}

Jeśli mam strumień obiektów uczniów i chcę posortować produkcję w kolejności rosnącej nazwy ucznia, to jak to zrobić?

1
Sauhard Sharma 3 czerwiec 2018, 11:27

3 odpowiedzi

Najlepsza odpowiedź

Załóżmy, że masz tablicę obiektów studentów w następujący sposób:

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

Wystarczy użyć komparatora, który w programowaniu Java 8 / Reaktywne można zapisać jako funkcję lambda, w Sport Metoda dostarczona przez FLUX.

Tutaj Obj1 i Obj2 są obiektami klasy studenckiej, które są porównywane ze sobą.

Obj1.comPareto (obj2) sortuje je w porządku rosnącym.

Flux.fromIterable (Arrays.asList(students)).sort( (obj1, obj2) -> obj1.getName().compareTo(obj2.getName()));
4
uneq95 5 listopad 2018, 11:00

Accepter Odpowiedź działa, ale zamiast toczyć własny sperfator możesz również użyć referencji metody, biorąc pod uwagę, że klasa ma Galters:

class Student { 
   String name; 
   double height;

   public String getName() {
      return name;
   }

   // more getters
}

Możesz wtedy:

Flux.fromIterable(Arrays.asList(students)).sort(Comparator.comparing(Student::getName))
2
Johan 16 styczeń 2019, 09:49

Zaakceptowane Odpowiedź jest OK, ale sugerowałem inny sposób.

Jeśli to, co masz, jest tablicą studentów, możesz po prostu sortować za pomocą Array.sort, a następnie utwórz strumień z posortowanej tablicy wywołującej Flux.Fromarray.

Ale jeśli masz strumień ucznia, nie macierzy, Flux ma operatora do wykonywania tej pracy konkretnie - Flux.CollsortedList

Flux studentFlux = Flux.just(studentOne,studentTwo);
studentFlux.collectSortedList((studentObj1, studentObj2) -> studentObj1.getName().compareTo(studentObj2.getName()))
0
Sarowar 9 listopad 2018, 08:50