[英]Grouping elements with same date in a custom ArrayList
我有一个自定义ArrayList ,其中某些对象具有相同的日期,因此如果它们的日期相同,我想将它们合并为一个对象,这样对于每个唯一的日期,只有一个项目。
我已经尝试了以下方法,但无法按预期工作。
private ArrayList<Integer> getaardata()
{
ArrayList<Integer> arr = new ArrayList<>();
arr.clear();
for(int i=0;i<CallLogger.arrContactDetails.size()-1;i++)
{
for (int k = i+1; k < CallLogger.arrContactDetails.size(); k++)
{
String dateCurrnt = Util.convertStringToDate(
CallLogger.arrContactDetails.get(i).getDate());
String dateCurrntNew = Util.convertStringToDate(
CallLogger.arrContactDetails.get(k).getDate());
if(dateCurrnt.equalsIgnoreCase(dateCurrntNew)){
arr.add(Integer.parseInt(
CallLogger.arrContactDetails.get(i).getSmsCount()) +
Integer.parseInt(CallLogger.arrContactDetails.get(k).getSmsCount()));
}
else
{
arr.add(Integer.parseInt(
CallLogger.arrContactDetails.get(k).getSmsCount()));
}
}
}
Log.e("logtag", ""+arr.size());
return arr;
}
if(dateCurrnt.equalsIgnoreCase(dateCurrntNew)){
arr.set(i, Integer.parseInt(
CallLogger.arrContactDetails.get(i).getSmsCount()) +
Integer.parseInt(CallLogger.arrContactDetails.get(k).getSmsCount()));
}
else
{
arr.add(Integer.parseInt(CallLogger.arrContactDetails.get(k).getSmsCount()));
}
您可以使用HashMap<String, Integer>
,其中String
表示字符串形式的date
字段,而Integer
表示smsCount
字段。
这样,您就不需要在循环内部运行循环。 只有一个for循环有效。
String dateCurrnt = Util.convertStringToDate(
CallLogger.arrContactDetails.get(i).getDate());
Map<String, Integer> map = new HashMap<String, Integer>();
if (map.contains(dateCurrnt)) {
//get the value & add the new smsCount to it & set it
} else {
//put the value in map (first time)
map.put(dateCurrnt, Integer.parseInt(
CallLogger.arrContactDetails.get(i).getSmsCount()));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.