有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

共 (2) 个答案

  1. # 1 楼答案

    您正在向values添加一个元素,它是该CollectionString表示(在您的例子中是String“[3,6]”):

    values.add(BulkValues.toString());
    

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

    values.addAll(BulkValues);
    

    或者直接声明values为:

    ArrayList <String> values = new ArrayList<>(BulkValues);
    
  2. # 2 楼答案

    在这里,您将把total数组添加为字符串(values.add(BulkValues.toString()))。相反,你需要像这样使用addAll

    见下面的例子

    Map<String, String> map=new HashMap<>();
                map.put("one", "1");
                map.put("six", "6");
                map.put("three", "3");
                map.put("nine", "9");
                map.put("seven", "7");
                 Map<String, String> ratings =map;
                 Collection<String> BulkValues = ratings.values();
                 ArrayList <String> values = new ArrayList<>();
                 values.addAll(BulkValues);
    
                 Comparator<String> compare = new Comparator<String>() {
                     @Override
                     public int compare(String lhs, String rhs) {
                         return Integer.valueOf(lhs).compareTo(Integer.valueOf(rhs));
                     }
                 };
    
                 System.out.println(Collections.max(values, compare));
                }
    

    输出:

    9
    

    希望对你有帮助