簡體   English   中英

比較列表 Java 的日期

[英]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操作應用於相關標記(即doSomethingConsumer<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM