迭代对象列表并比较属性

时间:2015-05-29 18:34:13

标签: java arraylist compare

我正在尝试迭代包含 Helper 类对象的列表,并比较 Helper 的属性。根据比较,如果任何验证失败,我想向用户显示一些错误消息。以下是我的代码段。

public static void main(String[] args) {
    Map<String, String> errorMap = new HashMap<String, String>();
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    List<HelperDTO> helpers = new HelperTest().getHelpers();

    for (HelperDTO helperDTO : helpers) {
        String helperPkey = helperDTO.getHelperPkey();
        String employeePkey = helperDTO.getEmployeePkey();
        String helperStart = helperDTO.getHelperStart();
        String helperEnd = helperDTO.getHelperEnd();
        if (helperStart == null || "".equals(helperStart)) {
            errorMap.put("helperSt_" + helperPkey,
                    "Helper Start is required");
        }
        if (helperEnd == null || "".equals(helperEnd)) {
            errorMap.put("helperEnd_" + helperPkey,
                    "Helper End is required");
        }
        if (employeePkey == null || "".equals(employeePkey)) {
            errorMap.put("employee_" + helperPkey,
                    "Helper name is required");
        }

        try {
            if (helperStart != null && !"".equals(helperStart)
                    && helperEnd != null && !"".equals(helperEnd)) {

                Date helperStartDate = format.parse(helperStart);
                Date helperEndDate = format.parse(helperEnd);

                if (!helperEndDate.after(helperStartDate)) {
                    errorMap.put("helperEnd_" + helperPkey,
                            "Helper End should be after Helper Start.");
                }
            }

        } catch (ParseException e) {
            e.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

private List<HelperDTO> getHelpers() {
    List<HelperDTO> hdtoLst = new ArrayList<HelperDTO>();
    hdtoLst.add(new HelperDTO("100", "MANU", "07/06/2013", "08/06/2013"));
    hdtoLst.add(new HelperDTO("101", "DEEPAK", "07/06/2013", "08/06/2013"));
    hdtoLst.add(new HelperDTO("102", "MANU", "07/06/2013", "10/06/2013"));
    return hdtoLst;
        }

如何比较第一个对象的endDate和第二个对象的startDate等等(如果Employee Name相同。在上面的帮助列表中,1st&amp; 3rd对象的名称与'MANU'相同)。谁可以帮我这个事。在此先感谢!!

我不想比较对象或从列表中删除重复的对象

3 个答案:

答案 0 :(得分:0)

我认为您只需要为每个名称保留上次查看endDate的哈希值。例如。在你的循环之前声明这个:

Map<String,Date> lastDateForName = new HashMap<String,Date>();

然后在你测试了当前记录的所有其他内容后,就像这样:

if (lastDateForName.get(EmployeePKey) != null
    && !helperStartDate.after(lastDateForName.get(EmployeePKey))) {
  errorMap.put(...);
}
lastDateForName.put(EmployeePKey, helperEndDate)

答案 1 :(得分:0)

您可以像这样修改for循环:

    for( int i = 0; i < HelperDTO.size(); i++ )
    {
        for( int j = 1; i < HelperDTO.size(); j++ )
        {
            if( HelperDTO.size().get(i).getName.equals(HelperDTO.size().get(j).getName) )
            {
             /* End date of the Current Object */
             Date helperEndDate = format.parse( HelperDTO.get(i).helperEnd );
             /* Start date of the Next Object */
             Date helperStartDate = format.parse( HelperDTO.get(j).helperStart );
            }
        }
    }

注意: 我不建议维护另一个数据结构,因为您只使用这些日期一次,这也是为了比较。上述循环将在处理时间和内存使用方面提供最大性能。

答案 2 :(得分:0)

找到比较对象列表属性的方法。         List helpers = new HelperTest()。getHelpers();

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    <solid android:color="#79bfea" />
</shape>