I have a custom ArrayList where some objects have same date, so I want to merge them into a single object if their date is same, such that for each unique date there is only one item.
I have tried the following but it does not work as intended.
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()));
}
You can use HashMap<String, Integer>
, where String
represents date
field in string form & Integer
represents smsCount
field.
With this, you don't need to run a loop inside loop. Only one for loop will work.
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()));
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.