![](/img/trans.png)
[英]How to Compare a List of Objects and Their Properties, then Update the Original List in Java
[英]Iterate a list of objects and compare properties
我正在嘗試迭代包含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相同。在上面的助手列表中,第一個和第三個對象的名稱與'MANU'相同)。 誰可以幫我這個事。 提前致謝 !!
我不想比較對象或從列表中刪除重復的對象 。
我認為您只需要為每個名稱保留最后一次查看的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)
您可以這樣修改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 );
}
}
}
注意:我不建議您維護其他數據結構,因為您僅將這些日期使用一次,並且也將其用於比較。 上面的循環將在處理時間和內存使用方面提供最佳性能。
找到了比較對象列表屬性的方法。 列出助手= new HelperTest()。getHelpers();
for (int i = 0; i < helpers.size(); i++) {
String outerPkey = helpers.get(i).getHelperPkey();
String outerEmpPkey = helpers.get(i).getEmployeePkey();
String outerStart = helpers.get(i).getHelperStart();
String outerEnd = helpers.get(i).getHelperEnd();
if (outerStart == null || "".equals(outerStart)) {
errorMap.put("helperSt_" + outerPkey,
"Helper Start is required");
}
if (outerEnd == null || "".equals(outerEnd)) {
errorMap.put("helperEnd_" + outerPkey, "Helper End is required");
}
if (outerEmpPkey == null || "".equals(outerEmpPkey)) {
errorMap.put("employee_" + outerPkey, "Helper name is required");
}
if (compareDate(outerStart, outerEnd)) {
errorMap.put("helperEnd_" + outerPkey,
"Helper End should be after Helper Start.");
}
for (int j = 0; j < helpers.size(); j++) {
String innerEmpPkey = helpers.get(j).getEmployeePkey();
if (j > i && outerEmpPkey.equals(innerEmpPkey)) {
String innerStart = helpers.get(j).getHelperStart();
String innerEnd = helpers.get(j).getHelperEnd();
if (compareDate(outerStart, outerEnd)
|| compareDate(innerStart, innerEnd)) {
continue;// outer loop should take care this
}
if (compareOverlap(innerStart, innerEnd, outerStart,
outerEnd)) {
errorMap.put("helperEnd_" + outerPkey,
"Helper End should be after Helper Start1.");
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.