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

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

如何根據(jù)Java中的多個參數(shù)過濾列表中的數(shù)據(jù)?

如何根據(jù)Java中的多個參數(shù)過濾列表中的數(shù)據(jù)?

Smart貓小萌 2022-06-04 09:58:10
我有一個GroupOffices列表List<GroupOffice> officesOfTheGroup;我想搜索 id 是否不等于groupOffice.getId (Long value) 但標(biāo)簽是groupOffice.getLabel (String) 并將其分配給布爾值。下面的代碼運行良好,但是有沒有更好的方法而不是使用 for 循環(huán)遍歷所有項目? public GroupOfficeDto saveGroupOffice(GroupOfficeDto groupOfficeDto) {                 List<GroupOffice> officesOfTheGroup = //some list from db..            for (GroupOffice go : officesOfTheGroup) {                if ((!go.getId().equals(groupOfficeDto.getId())) && go.getLabel().equals(groupOfficeDto.getLabel())) {                    return groupOfficeDto;                }        return null:}或者我該如何使用流?如果是這樣,使用流是更好的方法嗎?注意:我使用的是 Java8
查看完整描述

3 回答

?
呼如林

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

有沒有更好的方法而不是通過for循環(huán)遍歷所有項目?


值得注意的是,如果在到達列表末尾之前找到可接受的項目,您的代碼不會遍歷所有項目。但是,如果您只有要使用的列表,那么除了準(zhǔn)備檢查每個列表元素之外別無選擇。至于是否使用for循環(huán),我認為這很好。


或者我該如何使用流?如果是這樣,使用流是更好的方法嗎?


這些天使用流確實很流行,雖然它們的使用似乎比我認為的要多,但你的用例并不是不合理的。你可以這樣寫:


public GroupOfficeDto saveGroupOffice(GroupOfficeDto groupOfficeDto) {     

    List<GroupOffice> officesOfTheGroup = //some list from db..

    Integer officeId = groupOfficeDto.getId();

    String officeLabel = groupOfficeDto.getLabel();


    return officesOfTheGroup.stream()

            .filter(o -> !o.getId().equals(officeId))

            .anyMatch(o -> o.getLabel().equals(officeLabel))

        ? groupOfficeDto : null;

}

這里特別相關(guān)的是.anyMatch()終端操作的使用,因為它允許流處理在結(jié)果確定后立即完成,就像你的for循環(huán)一樣,而不是處理整個流。另請注意,您正在比較辦公室的 ID 和標(biāo)簽被提取并存儲在流表達式之前的變量中。這允許它們“有效地最終”,這是它們出現(xiàn)在流中的 lambda 中所必需的。這樣做也稍微更有效率,而不是一遍又一遍地從 DTO 檢索相同的對象——對于for循環(huán)情況也是如此。


請注意,流版本并不比循環(huán)版本簡單得多,也不容易閱讀。我個人認為其中任何一個都沒有太多優(yōu)勢。


查看完整回答
反對 回復(fù) 2022-06-04
?
慕萊塢森

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

嘗試這個:


public GroupOfficeDto saveGroupOffice(GroupOfficeDto groupOfficeDto) {

    ...     

    List<GroupOffice> result = officesOfTheGroup.stream()

        .filter(it -> it.getLabel().equals(groupOfficeDto.getLabel()))

        .filter(it -> !it.getId().equals(groupOfficeDto.getId()))

        .collect(Collectors.toList())

    ...

}


查看完整回答
反對 回復(fù) 2022-06-04
?
Helenr

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

如果您需要布爾值,您可以執(zhí)行以下操作:

boolean b = officesOfTheGroup.stream()
    .anyMatch(office -> !office.getId().equals(5) && office.getLabel().equals("London"))



查看完整回答
反對 回復(fù) 2022-06-04
  • 3 回答
  • 0 關(guān)注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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