Я повторил вашу проблему и нашел способ получить кандидата с наибольшим количеством голосов.
Добавьте приведенный ниже метод в свой класс модели.
@Override
public int compareTo(Candidate o) {
return (this.getTotalVotes() > o.getTotalVotes() ? -1 :
(this.getTotalVotes() == o.getTotalVotes() ? 0 : 1));
}
Чтобы переопределить метод compareTo, вам нужно реализовать класс Comparable с помощью implements Comparable<Candidate>
Создать класс для сортировки значений
public class Sorter {
ArrayList<Candidate> candidateList = new ArrayList<>();
public Sorter(ArrayList<Candidate> candidateList) {
this.candidateList = candidateList;
}
public ArrayList<Candidate> sortByTotalVotes() {
Collections.sort(candidateList);
return candidateList;
}
}
В вашем классе Activity добавьте
Здесь вам нужно добавить все данные, извлеченные из базы данных, в список массивов. После добавления всех данных вам необходимо отсортировать данные и отобразить результат.
Query query = databaseReference.child("candidates").orderByChild("category").equalTo("President");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
ArrayList<Candidate> candidates = new ArrayList<>();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
int id = dataSnapshot1.child("totalVotes").getValue(Integer.class);
String firstName = dataSnapshot1.child("firstName").getValue(String.class);
String lastName = dataSnapshot1.child("lastName").getValue(String.class);
candidate = new Candidate(firstName, lastName, id);
candidates.add(candidate);
}
Sorter sorter = new Sorter(candidates);
ArrayList<Candidate> candidateArrayList = sorter.sortByTotalVotes();
System.out.println("Max value: " + candidateArrayList.get(0));
System.out.println("Printing the sorted values----------------");
for (Candidate candidate : candidateArrayList) {
System.out.println(candidate);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});