繁体   English   中英

在自定义ArrayList中将具有相同日期的元素分组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM