簡體   English   中英

java ArrayList檢索最高值

[英]java ArrayList retrieving highest value

執行此代碼應該是結果編號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

是因為它仍被視為一個單一的字符串[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());
        }

您正在向values添加單個元素,這是該CollectionString表示形式(在您的情況下為String “[3,6]”):

values.add(BulkValues.toString());

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

values.addAll(BulkValues);

或者只是將values聲明為:

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

在這里,您將整個數組添加為字符串(values.add(BulkValues.toString())) 而不是你需要像這樣的值使用addAll values.addAll(BulkValues);

見下面的例子。

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

希望它會對你有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM