Java 在firebase中筛选快照结果

Java 在firebase中筛选快照结果,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,这是我的数据库: 对于每个类别,它都应该选出“总票数”最高的候选人 这是我的密码: Query presidentquery = reference.child("candidates").orderByChild("category").equalTo("President"); presidentquery.addListenerForSingleValueEvent(new ValueEventListener() { @Override

这是我的数据库:

对于每个类别,它都应该选出“总票数”最高的候选人

这是我的密码:

Query presidentquery = reference.child("candidates").orderByChild("category").equalTo("President");
        presidentquery.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                        String firstname = dataSnapshot1.child("firstname").getValue(String.class);
                        String lastname = dataSnapshot1.child("lastname").getValue(String.class);
                        Long tvotes = dataSnapshot1.child("totalVotes").getValue(Long.class);
                        pres.setText(firstname + " " + lastname+" - "+tvotes+" Votes");
                    }
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
它不返回得票最高的候选人,而是返回最近的候选人。 如何在datasnapshot中过滤结果以显示“总投票数”最高的候选人


谢谢

我重复了你的问题,找到了一种获得最高票数的候选人的方法

在模型类中添加以下方法。

@Override
    public int compareTo(Candidate o) {
        return (this.getTotalVotes() > o.getTotalVotes() ? -1 :
                (this.getTotalVotes() == o.getTotalVotes() ? 0 : 1));
    }
要重写compareTo方法,需要通过
implements Comparable

创建一个类来对值进行排序

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;
    }

}
公共类分拣机{
ArrayList candidateList=新的ArrayList();
公共分拣员(ArrayList候选名单){
this.candidateList=候选名单;
}
公共ArrayList SortByTotalVows(){
集合。排序(候选列表);
返回候选人名单;
}
}
在活动课中,添加

在这里,您需要将从数据库获取的所有数据添加到数组列表中。添加所有数据后,需要对数据进行排序并显示结果

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) {

    }
});
Query Query=databaseReference.child(“候选人”).orderByChild(“类别”).equalTo(“总裁”);
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
ArrayList候选者=新的ArrayList();
对于(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);
候选者=新候选者(名字、姓氏、id);
候选人。添加(候选人);
}
分拣机=新分拣机(候选);
ArrayList candidateArrayList=sorter.sortByTotalVoces();
System.out.println(“最大值:+candidateArrayList.get(0));
System.out.println(“打印排序后的值--------------------------”);
(候选人:candidateArrayList){
系统输出打印项次(候选);
}   
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});

您检查过这个吗?它无法工作。我似乎在处理查询中的查询。Firebase数据库查询只能对单个属性进行排序/筛选。在许多情况下,可以将要筛选的值组合到单个(合成)特性中。关于这种方法和其他方法的示例,请参见我的答案:在您向我指出之前,您是否已经回答了这样一个java问题?我不太擅长javascript,上面的答案是关于javascript的