如何获取数组中重复元素的计数。爪哇
Posted
技术标签:
【中文标题】如何获取数组中重复元素的计数。爪哇【英文标题】:How get counts of repeat elements in Array. Java 【发布时间】:2022-01-08 04:10:58 【问题描述】:我需要从数据库中获取当天的记录数。 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)
);
【问题讨论】:
您能否验证,currDate
和 dateFormat
两个字符串日期在任何时间点都相同?有两个原因listDate.contains(currDate)
会return false
。根本没有匹配的日期,或者有一个匹配的日期,但格式不正确,因为此时您只是在比较 String
s。
为什么不使用startAt(startOfTheDay)
和endAt(endOfTheDay)
的查询?
@avalerio 谢谢你的回答。我在日志中看到 listDate.contains(currDate)
- return true
。我检查了数组和 currDate
中的格式日期。这是一样的。
@AlexMamo 这是个好主意!我会尽力。谢谢
【参考方案1】:
如果您想知道与特定日期匹配的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
匹配的日期总数。
【讨论】:
非常有帮助。非常感谢以上是关于如何获取数组中重复元素的计数。爪哇的主要内容,如果未能解决你的问题,请参考以下文章
如何在调用 AdapterFragment 之前正确填充数组?爪哇
获取数组中每个索引的子文档元素计数并更新子文档键 - 数组中的子文档(IN MONGODB)