如何获取数组中重复元素的计数。 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
.
匹配的日期总数
我需要从数据库中获取当天的记录数。 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
.