[英]Removing from List with date comparing
我必须删除param.getFromDateTime
之前和params.getToDateTime
之后的所有对象。 我这样做是这样的:
for (ListIterator<Doc> iterator = doc.listIterator(); iterator.hasNext(); ) {
while(iterator.hasNext()){
if(param.getFromDateTime() != null
&& doc.get(iterator.nextIndex()).getDate().before(params.getFromTime())) {
iterator.remove();
}
if(params.getToDateTime() != null
&& doc.get(iterator.nextIndex()).getDate().after(params.getToDateTime())) {
iterator.remove();
}
}
}
我可以做得更好,更清晰吗?
您不需要两个循环,也不需要ListIterator
。
请注意,这两个条件可能是正确的,但是无论如何您都只希望删除一个元素,因为调用两次remove()
会引发异常。
您还可以直接从迭代的Doc
对象中提取date
,以使其更加清晰:
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();
}
}
带流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());
如果您使用的是Java 8,则可能要使用List.removeIf
:
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()))
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.