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

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

使用多個過濾器使用 Java Stream 搜索列表

使用多個過濾器使用 Java Stream 搜索列表

猛跑小豬 2022-04-28 17:12:35
我有一個 Java 對象列表(假設(shè) getter 和 setter):Record(String name, String part, String value);如果列表包含某個name值和某個值,我需要返回一個布爾part值。我一次只為一個過濾器工作://assume records are added to this listList<Record> masterList = new ArrayList<Record>();boolean check = masterList.stream().map(Record::getName).filter(record.getName()::equals).findFirst().isPresent();但是我對此嘗試出錯Non-static method cannot be referenced from a static context:Record::getPartmasterList.stream().map(Record::getName).filter(record.getName()::equals).map(Record::getPart).filter(record.getPart()::equals).findFirst().isPresent();
查看完整描述

1 回答

?
慕慕森

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

你試圖做的事情是不可能的,即當你執(zhí)行時,map(Record::getName)你有一個Stream<String>所有字符串都是記錄名稱的地方,之后的任何鏈接方法調(diào)用都僅基于記錄名稱。


而是只使用一個filter:


boolean check = masterList.stream()

                           .filter(s -> s.getName().equals(record.getName()) &&

                                        s.getPart().equals(record.getPart()))

                           .findFirst().isPresent();

或更好地使用anyMatch


boolean check = masterList.stream()

                         .anyMatch(s -> s.getName().equals(record.getName()) &&

                                    s.getPart().equals(record.getPart()));

編輯:


如果它可以是一個記錄匹配名稱,另一個記錄匹配部分?


然后您可以將所有記錄名稱和部分收集到一個集合中,如下所示:


Set<String> container = masterList.stream()

                                  .flatMap(r -> Stream.of(r.getName(), r.getPart()))

                                  .collect(toSet());

然后做:


boolean result = container.contains(record.getName()) && 

                 container.contains(record.getPart()) ;


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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