如何获取数组中重复元素的计数。 Java

How get counts of repeat elements in Array. Java

我需要从数据库中获取当天的记录数。 Firebase Realtime 中的条目是时间戳,我使用 SimpleDateFormat 解析它们。

但我无法获得记录的计数,例如,今天的日期。告诉我该怎么做?谢谢

IMAGE RECORDS IN FIREBASE REALTIME

private void fetchDataWaterCount() {
    currDate = null;
    String uid = firebaseAuth.getUid();
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        currDate = LocalDate.now().toString();
    }
    waterRef = FirebaseDatabase.getInstance().getReference("Users").child(uid).child("body").child("water");
    waterRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()) {
                for (DataSnapshot ds : snapshot.getChildren()) {
                    waterModel = ds.getValue(WaterModel.class);
                    waterArray.add(waterModel);
                    waterModel.setWaterModelList(waterArray);
                    ArrayList listDate = new ArrayList();
                        for (int i = 0; i < waterModel.getWaterModelList().size(); i++) {
                            long dateList = waterModel.getWaterModelList().get(i).getDate();
                            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
                            String dateFormat = formatter.format(new Date(dateList));
                            listDate.add(dateFormat);
                            if(listDate.contains(currDate)){
                                int water_count = (int) listDate.size();
                                drawable = getActivity().getDrawable(R.drawable.circut_progress_bar);
                                progressBar.setProgress(water_count);
                                progressBar.setMax(12);
                                progressBar.setSecondaryProgress(water_count);
                                progressBar.setProgressDrawable(drawable);
                                textViewWaterCount.setText(String.valueOf(water_count));
                                if (water_count >= 12) {
                                    textViewWaterCount.setText("Done");
                                    textViewWaterCount.setTextColor(getResources().getColor(R.color.colorGreen_900));
                                    drawable = getActivity().getDrawable(R.drawable.circut_progressbar_green);
                                    progressBar.setProgressDrawable(drawable);
                                }
                            }
                        }
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

如果您想知道与特定日期匹配的 WaterModels 的数量,那么您需要在它们出现时对它们进行计数。

您目前正在将每个日期都添加到列表中,无论它是否与 currDate 匹配,因此您计算的是总日期而不是特定日期的具体数量。

//Add this
int dateCount = 0;

for (int i = 0; i < waterModel.getWaterModelList().size(); i++) {
    long dateList = waterModel.getWaterModelList().get(i).getDate();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
    String dateFormat = formatter.format(new Date(dateList));
    listDate.add(dateFormat);


    //Add this
    if(dateFormat == currDate){
             dateCount++;
    }


    //I don't know what your doing here but this will return true
    //if there is at least 1 match. You can't use this to track how many dates
    //match
    if (listDate.contains(currDate)) {
        int water_count = (int) listDate.size();
        drawable = getActivity().getDrawable(R.drawable.circut_progress_bar);
        progressBar.setProgress(water_count);
        progressBar.setMax(12);
        progressBar.setSecondaryProgress(water_count);
        progressBar.setProgressDrawable(drawable);
        textViewWaterCount.setText(String.valueOf(water_count));
        if (water_count >= 12) {
            textViewWaterCount.setText("Done");
            textViewWaterCount.setTextColor(getResources().getColor(R.color.colorGreen_900));
            drawable = getActivity().getDrawable(R.drawable.circut_progressbar_green);
            progressBar.setProgressDrawable(drawable);
        }
    }
}

dateCount 将包含与 currDate.

匹配的日期总数