[英]Comparing Dates of list Java
我想要一些幫助。 我很難比較列表中的日期。 我想比較 List 的日期
我的問題是我正在嘗試比較 ExamsDate 中的考試日期
我想將日期保存在 arraylist 考試日期上,並為每個學生的分數進行比較。 然后找到 maxDate 並與之比較。
for (Mark mark : student.getMarks()) {
dates.add(mark.getExamsDate();
}
Date maxDate = dates.stream()
.max(Date::compareTo)
.get();
for (Mark mark : student.getMarks()) {
for(Date date: examDates){
if(mark.getExamsDate().before(maxDate)
|| mark.getExamsDate().equals(maxDate)) {
doSomething
}
}
}
}
這樣我比較相同的日期,所以它不是一個解決方案。也許我應該使用 collections 但我不熟悉它。
我的困難是比較 if(mark.getExamsDate().after(mark.getPreviousExamsDate()) 而我不知道如何找到上一個日期
換句話說,我想查找按日期排序的所有日期。 如果最大日期存在doSomething,否則找到第二個最大的日期和doSomething()
似乎需要找到兩個最新的不同考試日期的列表並將doSomething
操作應用於相關標記(即doSomething
是Consumer<Mark>
)。
這可以像這樣實現:
List<Date> twoLatestDates = marks
.stream()
.map(Mark::getExamsDate) // Stream<Date>
.sorted(Collections.reverseOrder(Date::compareTo)) // sort in descending order
.distinct() // remove duplicates
.limit(2) // keep 2 latest dates
.collect(Collectors.toList());
marks.stream()
.filter(m -> twoLatestDates.contains(m.getExamsDate()))
.forEach(MyClass::doSomething);
/////
private static void doSomething(Mark mark) {
System.out.println("doSomething: " + mark);
}
另一種方法是按考試日期對分數進行分組,將結果收集到排序的 map SortedMap<Date, List<Mark>>
然后按適當的日期獲取值並應用doSomething
:
marks.stream()
.collect(Collectors.groupingBy(
Mark::getExamsDate, // using examsDate as key
TreeMap::new, // map sorted by examDate
Collectors.toList()
))
.descendingMap() // reverse sorting order
.values().stream() // Stream<List<Mark>>
.limit(2) // keep values related to the latest two dates
.flatMap(List::stream) // join the streams into Stream<Mark>
.forEach(MyClass::doSomething);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.