检索最高值的java ArrayList

检索最高值的java ArrayList,java,android-studio,arraylist,collections,hashmap,Java,Android Studio,Arraylist,Collections,Hashmap,由于我只从Data.snapshot[3,6]中检索两个值,因此执行此代码应该是结果6。但我一直以这种形式得到它们:[3,6]。 是否有什么地方我做错了,或者我对提取的快照和HashMap的理解不正确,以及如何获得最高值 public void ratingCount(){ Firebase ref = new Firebase("https://CLOUD_NAME.firebaseio.com/rating/"+UserID); ref.addValueEventL

由于我只从Data.snapshot[3,6]中检索两个值,因此执行此代码应该是结果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) {

        }
    });
}
是否因为它仍然被视为一个字符串[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());
        }
Map=(HashMap)snapshot.getValue();
地图评级=地图;
集合值=ratings.values();
ArrayList值=新的ArrayList();
values.addAll(BulkValues);
Long max=Collections.max(值);
textViewRatingValue.setText(最大toString());
}

您正在将单个元素添加到
值中,该元素是
集合的
字符串
表示形式(在您的示例中为
字符串“[3,6]”):

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

values.addAll(BulkValues);
或者只需将
值声明为:

ArrayList <String> values = new ArrayList<>(BulkValues);
ArrayList值=新的ArrayList(BulkValues);

在这里,您要将total数组添加为字符串
(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));
            }

希望它能对您有所帮助。

您的解释很有道理,但是我在应用它时遇到了一个错误,您可以在我的主线程更新中看到这一点吗?是因为哈希图快照,是一个单一的字符串提取,不能比较?你太快,再检查LOL。此外,我尝试过“Viu”建议,但我看到在他的代码中,他没有考虑的事实,我正在接收的数据作为一个快照从FialBasic,我猜它是一个对象,我不是输入数据在我自己,因此,我尝试使用他的代码,但我不确定如何使用,如果我做得正确?@JanusJanus您得到的错误意味着
快照中的值是长的,而不是字符串,因此将其转换为
(HashMap)
可能是错误的。你应该检查你得到的实际运行时类型,并在你的代码中使用正确的类型。我希望你能耐心听我说,因为我对一些事情不太熟悉,我如何检查运行时类型?甚至当我试图将代码中的所有“字符串”都改为Long时,最后我在下面的“比较”中得到了一条红色下划线:textViewRatingValue.setText(Collections.max(values,compare))@JanusJanus如果值是
列表
,则不需要比较器。只需使用
Collections.max(values)
。我尝试了您的建议,但我从firebase接收到的数据是快照,我猜它是一个对象,因此不确定如何传递数据,如果我做得正确?@JanusJane抱歉,我没有正确观察。这里我猜snapshot.getValue()返回具有长值的Hashmap对象,但您将其分配给Hashmap,这是错误的。。所以您需要这样做(Hashmap)ratings.value();是的,谢谢@venu,现在工作,理解了这个概念。
values.addAll(BulkValues);
ArrayList <String> values = new ArrayList<>(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