安卓 studio java ArrayList正在检索最高值
由于我只从数据中检索两个值,所以执行此代码应该是结果6。快照[3,6]。但我一直以这种形式得到它们:[3,6]。 是否有什么地方我做错了,或者我对提取的快照和HashMap的理解不正确,以及如何获得最高值
public void ratingCount(){
Firebase ref = new Firebase("https://CLOUD_NAME.firebaseio.com/rating/"+UserID);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
Map<String, String> ratings = (HashMap<String,String>) snapshot.getValue();
Collection<String> BulkValues = ratings.values();
ArrayList <String> values = new ArrayList<>();
values.add(BulkValues.toString());
Comparator<String> compare = new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
return Integer.valueOf(lhs).compareTo(Integer.valueOf(rhs));
}
};
textViewRatingValue.setText(Collections.max(values, compare));
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
应用ERAN建议,代码为
public void onDataChange(DataSnapshot snapshot) {
Map<String, String> ratings = (HashMap<String,String>) snapshot.getValue();
Collection<String> BulkValues = ratings.values();
ArrayList <String> values = new ArrayList<>(BulkValues);
Comparator<String> compare = new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
return Integer.valueOf(lhs).compareTo(Integer.valueOf(rhs));
}
};
textViewRatingValue.setText(Collections.max(values, compare));
}
错误是:
04-06 13:07:37.353 31832-31832/net.we4x4.we4x4 E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.we4x4.we4x4, PID: 31832
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
at net.we4x4.we4x4.MyInformation$7$1.compare(MyInformation.java:259)
at java.util.Collections.max(Collections.java:1629)
at net.we4x4.we4x4.MyInformation$7.onDataChange
是否因为它仍然被视为一个字符串[3,6],无法进行比较?还是因为我以错误的方式将其传递给textView“textViewRatingValue”
好的,由于Eran的精确解释,检索到的数据是“长”的,因此必须这样表示,这是我犯的第二个错误,这样做得到最大值更简单,如下所示:
Map<Long, Long> map = (HashMap<Long, Long>) snapshot.getValue();
Map<Long, Long> ratings = map;
Collection<Long> BulkValues = ratings.values();
ArrayList<Long> values = new ArrayList<>();
values.addAll(BulkValues);
Long max = Collections.max(values);
textViewRatingValue.setText(max.toString());
}
# 1 楼答案
您正在向
values
添加一个元素,它是该Collection
的String
表示(在您的例子中是String
“[3,6]”):如果要添加所有元素,请使用:
或者直接声明
values
为:# 2 楼答案
在这里,您将把total数组添加为字符串
(values.add(BulkValues.toString()))
。相反,你需要像这样使用addAll
见下面的例子
输出:
希望对你有帮助