第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaFX:在迭代時刪除特殊日期

JavaFX:在迭代時刪除特殊日期

元芳怎么了 2023-08-04 10:02:40
我知道,有很多示例如何在迭代列表時從列表中刪除某些內(nèi)容,但這不是重點。我正在嘗試自動化記錄我的工作的流程(最終應(yīng)該打印到類似于01.01.2019 - Tuesday的文檔中)。為此,我有一個帶有兩個日期選擇器的用戶界面。選擇兩個不同的日期并進行比較后,我知道這些日期之間有多少天?,F(xiàn)在出現(xiàn)以下問題:我將兩個日期之間的所有日期添加到列表中。之后,我嘗試阻止一些特定的日子(總是同一天:星期一、星期六和星期日)。這些日子不應(yīng)該再出現(xiàn)在列表中。我嘗試過在迭代列表時將值從列表中刪除之類的操作。但它并沒有按照我期望的方式工作。例子:我選擇17.09.2019作為開始,24.09.2019作為結(jié)束。預(yù)期輸出應(yīng)該是:平日:星期二日期:2019-09-18平日:星期三日期:2019-09-19平日:星期四日期:2019-09-20平日:星期五日期:2019-09-24平日:星期二但如果我運行我的代碼,輸出是:工作日: 星期二日期: 2019-09-18工作日: 星期三日期: 2019-09-19 工作日: 星期四日期: 2019-09-20工作日: 星期五日期: 2019-09-21工作日: 星期五日期: 2019-09-22工作日:星期五日期:2019-09-23工作日:星期五日期:2019-09-24工作日:星期二你可以看到。星期六、星期日和星期一這個詞將被刪除,但它仍然在列表中。代碼:long daysBetween = ChronoUnit.DAYS.between(dateBeginPicker.getValue(), dateEndPicker.getValue());                int db = Math.toIntExact(daysBetween);                String day = "";                List<LocalDate> dateList = new ArrayList<>();                LocalDate dateAfter = null;                for (int i = 0; i <= db; i++) {                    dateAfter = dateBeginPicker.getValue().plusDays(i);                    dateList.add(dateAfter);                }                for (Iterator<LocalDate> iterator = dateList.iterator(); iterator.hasNext();) {                    LocalDate date = iterator.next();                    if (date.getDayOfWeek().equals(DayOfWeek.SATURDAY) || date.getDayOfWeek().equals(DayOfWeek.SUNDAY) || date.getDayOfWeek().equals(DayOfWeek.MONDAY)) {                        iterator.remove();                        dateList.remove(date);                    }                    else {                        day = date.getDayOfWeek().toString();                    }                    System.out.println("Date: " + date);                    System.out.println("Weekday: " + day);                }我最終期望的是,每個星期一、星期六和星期日應(yīng)該從列表中刪除,并且輸出應(yīng)該是正確的(如我的示例中所示)。
查看完整描述

2 回答

?
MMTTMM

TA貢獻1869條經(jīng)驗 獲得超4個贊

您的 System.out.println() 命令位于 for 循環(huán)內(nèi),但位于 else 塊之外。這就是顯示所有日期的原因。

只需將這兩行移到 else 塊內(nèi),您就會得到您想要的輸出。


查看完整回答
反對 回復(fù) 2023-08-04
?
SMILET

TA貢獻1796條經(jīng)驗 獲得超4個贊

我很高興你解決了你的問題。我想補充三點。

  1. 如果您愿意,可以使用流。

  2. 您不應(yīng)該在Iterator和 上同時調(diào)用remove List。

  3. 我對你的代碼出了什么問題的解釋。

1.您可以使用流。在 Java 9 及更高版本中最簡單:

    LocalDate begin = LocalDate.of(2019, Month.SEPTEMBER, 17);

    LocalDate end = LocalDate.of(2019, Month.SEPTEMBER, 24);


    final Set<DayOfWeek> blockedDays = EnumSet.of(DayOfWeek.MONDAY, DayOfWeek.SATURDAY, DayOfWeek.SUNDAY);

    List<LocalDate> dateList = begin.datesUntil(end.plusDays(1))

            .filter(ld -> ! blockedDays.contains(ld.getDayOfWeek()))

            .collect(Collectors.toList());


    dateList.forEach(ld -> {

        System.out.println(ld.getDayOfWeek());

        System.out.println(ld);

    });

輸出是:


TUESDAY

2019-09-17

WEDNESDAY

2019-09-18

THURSDAY

2019-09-19

FRIDAY

2019-09-20

TUESDAY

2019-09-24

2.不要打電話dateList.remove()。您撥打的電話iterator.remove()已將該日期從列表中刪除。所以你的調(diào)用dateList.remove()什么也不做。這是一種運氣。如果它找到要刪除的元素,則會在后續(xù)調(diào)用時Iterator拋出 a 。除非通過迭代器,否則不允許在迭代集合時修改集合,并且嘗試執(zhí)行此操作的結(jié)果是未定義的。因此,請從代碼中刪除該調(diào)用。ConcurrentModificationExceptionhasNext()


3. 你的代碼出了什么問題?你的輸出看起來很有趣。對于被阻止的日子FRIDAY是與日期一起打印的,即星期幾和日期不匹配。發(fā)生的情況是:您正確設(shè)置了date列表中的日期。由于這一天是封鎖日,您執(zhí)行了if該語句的一部分if,從列表中刪除了該日期。您沒有執(zhí)行該else部分,因此day與上一次迭代相比沒有變化FRIDAY。if您無條件打印的語句后date,封鎖日期(依次為2019-09-21、2019-09-22和2019-09-23),以及day(FRIDAY每次)。


查看完整回答
反對 回復(fù) 2023-08-04
  • 2 回答
  • 0 關(guān)注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號