java ArrayList 获取最大值

标签 java android-studio arraylist collections hashmap

执行此代码应该得到 6 号结果,因为我只从 Data.snapshot [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) {

        }
    });
}

应用Erans的建议,代码是;

             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

是否因为它仍然被视为一个单一的 String [3,6] 而无法进行比较?或者因为我以错误的方式将它传递给 textView“textViewRatingValue”?

好吧,感谢 Eran 的精确解释,检索到的数据是“Long”,因此必须指出,这是我犯的第二个错误,这样做得到最大值更简单,如下所示;

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

最佳答案

您正在向 values 添加一个元素,它是 CollectionString 表示(String "[3,6]"在你的情况下):

values.add(BulkValues.toString());

如果要添加所有元素,请使用:

values.addAll(BulkValues);

或者只是声明 values 为:

ArrayList <String> values = new ArrayList<>(BulkValues);

关于java ArrayList 获取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36445587/

相关文章:

java - 如何使 SimpleDateFormat.parse() 失败?

android - Gradle同步失败:在未定义特定主类的情况下无法启动守护进程

android - 如何在 Android Studio 0.5.4 中使用 PhoneGap?

c# - 在 ASP.NET 中使用Where子句

java - Hibernate问题-映射ArrayList

java - 查找两个 "/"之间的子字符串

资源文件夹中的java spring图像不可用(404错误)

java - NetBeans - 需要帮助从自动生成的代码更新 jProgressBar

android - 未找到 native 方法 : org. opencv.core.Mat.n_Mat:()J

java - 仅当 arraylist 中不存在具有相同名称的其他项目时,如何添加项目?