从列表中删除日期比较

我必须删除之前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();

           }

    }

}

我可以做得更好更清晰吗?


HUX布斯
浏览 97回答 3
3回答

神不在的星期二

您不需要两个循环,也不需要ListIterator。请注意,这两个条件可能为真,但在任何情况下您都只想删除一个元素,因为调用两次remove()会引发异常。您还可以直接date从迭代Doc对象中提取 ,使其更加清晰:for (Iterator<Doc> iterator = doc.iterator(); iterator.hasNext(); ) {&nbsp; &nbsp; &nbsp; Date date = iterator.next().getDate();&nbsp; &nbsp; &nbsp; if( (param.getFromDateTime() != null && date.before(params.getFromTime()))&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || (params.getToDateTime() != null && date.after(params.getToDateTime()))) {&nbsp; &nbsp; &nbsp; &nbsp; iterator.remove();&nbsp; &nbsp; &nbsp; }}

子衿沉夜

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 intervaldocs.removeIf(doc ->&nbsp; &nbsp; (params.getFromTime() != null && doc.getDate().before(params.getFromTime()))&nbsp; &nbsp; || (params.getToDateTime() != null && doc.getDate().after(params.getToDateTime())));

扬帆大鱼

带有流 api 的 java-8 近似:List<Doc> docs = ...;Stream<Doc> stream = docs.stream();LocalDateTime fromDateTime = param.getFromDateTime();LocalDateTime toDateTime = param.getToDateTime();if (fromDateTime != null){&nbsp; &nbsp; stream = stream.filter(d -> !d.getDate().before(fromDateTime);}if (toDateTime != null){&nbsp; &nbsp; stream = stream.filter(d -> !d.getDate().after(toDateTime);}docs = stream.collect(Collectors.toList());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java