gpt4 book ai didi

java - 在 firebase 中过滤快照结果

转载 作者:行者123 更新时间:2023-12-02 08:45:28 25 4
gpt4 key购买 nike

这是我的数据库:

Firebase database

对于每个类别,应该返回“总票数”最高的候选人。

这是我的代码:

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 中的结果以显示“totalVotes”最高的候选人。

谢谢

最佳答案

我复制了您的问题,并找到了获得票数最高的候选人的方法。

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

@Override
public int compareTo(Candidate o) {
return (this.getTotalVotes() > o.getTotalVotes() ? -1 :
(this.getTotalVotes() == o.getTotalVotes() ? 0 : 1));
}

要重写compareTo方法,您需要通过implements Comparable<Candidate>实现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;
}

}

在您的 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) {

}
});

关于java - 在 firebase 中过滤快照结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61112573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com