3 回答

TA貢獻1963條經驗 獲得超6個贊
您不需要兩個循環,也不需要ListIterator。
請注意,這兩個條件可能為真,但在任何情況下您都只想刪除一個元素,因為調用兩次remove()會引發異常。
您還可以直接date從迭代Doc對象中提取 ,使其更加清晰:
for (Iterator<Doc> iterator = doc.iterator(); iterator.hasNext(); ) {
Date date = iterator.next().getDate();
if( (param.getFromDateTime() != null && date.before(params.getFromTime()))
|| (params.getToDateTime() != null && date.after(params.getToDateTime()))) {
iterator.remove();
}
}

TA貢獻1828條經驗 獲得超3個贊
List.removeIf如果您使用的是 Java 8,您可能需要使用:
List<Doc> docs = generateSomeValues(); // this ist just an imaginary filling of the list
// check if the params are not null and remove dates that are not in the given interval
docs.removeIf(doc ->
(params.getFromTime() != null && doc.getDate().before(params.getFromTime()))
|| (params.getToDateTime() != null && doc.getDate().after(params.getToDateTime()))
);

TA貢獻1799條經驗 獲得超9個贊
帶有流 api 的 java-8 近似:
List<Doc> docs = ...;
Stream<Doc> stream = docs.stream();
LocalDateTime fromDateTime = param.getFromDateTime();
LocalDateTime toDateTime = param.getToDateTime();
if (fromDateTime != null){
stream = stream.filter(d -> !d.getDate().before(fromDateTime);
}
if (toDateTime != null){
stream = stream.filter(d -> !d.getDate().after(toDateTime);
}
docs = stream.collect(Collectors.toList());
添加回答
舉報