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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

優(yōu)化MapcomputeIfPresent方法的java代碼

優(yōu)化MapcomputeIfPresent方法的java代碼

慕神8447489 2023-06-28 16:30:29
我有下面的方法,其中我從實(shí)體中提取值,然后將其設(shè)置在映射中作為該映射的值,但我的觀(guān)點(diǎn)是,對(duì)于每個(gè)鍵,我顯式設(shè)置值,因此如果鍵的數(shù)量增加方法代碼也會(huì)增長(zhǎng),我可以基于方法Map.computeIfPresent制作一個(gè)通用方法嗎,請(qǐng)告知我如何實(shí)現(xiàn)這兩件事   private void setMap(AbcLoginDTO abcLoginDTO, Map<String, Object> getMap) {        getMap.put("XXNAME", abcLoginDTO.getUsername());        getMap.put("XX_ID", abcLoginDTO.getClientId());        getMap.put("RR_ID", abcLoginDTO.getUserId());        getMap.put("QQ_TIME", abcuserLoginDTO.getLocktime());    }我在想類(lèi)似下面的方法static <E> void setIfPresent(Map<String, Object> map, String key, Consumer<E> setter, Function<Object, E> mapper) {        Object value = map.get(key);        if (value != null) {            setter.accept(mapper.apply(value));        }    }
查看完整描述

3 回答

?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

但我的觀(guān)點(diǎn)是,對(duì)于每個(gè)鍵,我都會(huì)顯式設(shè)置值,因此如果鍵的數(shù)量增加,方法代碼也會(huì)增加


您需要Map使用 DTO 中的不同值填充 ,因此您沒(méi)有其他選擇。

該方法很長(zhǎng),因?yàn)槟?Map 中添加的鍵和從 DTO 檢索的值之間沒(méi)有映射。


您可以使用以下函數(shù)編寫(xiě)代碼:


static void setValueInMap(Map<String, Object> map, String key, Supplier<Object> mapper) {

    map.put(key, mapper.get());

}

并使用它:


Map<String, Object> map = ...;

AbcLoginDTO dto = ...;

setIfPresent(map, "keyUserName", dto::getUserName);

// and so for 

但沒(méi)有真正的優(yōu)勢(shì)。


您的第二個(gè)片段與第一個(gè)片段完全沒(méi)有關(guān)系。


查看完整回答
反對(duì) 回復(fù) 2023-06-28
?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

如果我理解正確,您想要做的是迭代對(duì)象的所有成員,獲取它們的值,然后根據(jù)它們的名稱(chēng)將它們?cè)O(shè)置為映射。如果是這樣,那么您正在尋找的就是所謂的“反射”。


每個(gè)對(duì)象都可以為您提供其字段或方法(甚至是私有的?。┑臄?shù)組,然后您可以使用 Field / Method 對(duì)象來(lái)操作它們。


Field[] members = AbcLoginDTO.class.getDeclaredFields();

Map<String, Object> values = new HashMap<>();


for(Field member : members) {

    member.setAccessible(true);

    values.put(member.getName(), member.get(abcLoginDTO));

}

您最終得到的是 AbcLoginDTO 實(shí)例的“地圖表示”。從這里你可以用它做你想做的事...請(qǐng)注意,我在第 1 行中“檢查”類(lèi)本身,然后使用第 6 行中的實(shí)例。這段代碼并不完整,但它是一個(gè)開(kāi)始,這可以也適用于任何對(duì)象。


查看完整回答
反對(duì) 回復(fù) 2023-06-28
?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊

我不知道我是否理解正確,但如果我這樣做了,那就意味著您所需要的只是一種為您的方法手動(dòng)設(shè)置不同鍵的方法AbcLoginDTO class 如果是這樣,那么這可以輕松完成,讓我們考慮一下您的方法abcLoginDTO.getClientId()總是不同的每個(gè)AbcLoginDTO對(duì)象:


private void setMap(AbcLoginDTO abcLoginDTO, Map<String, Object> getMap) {

        getMap.put(Integer.toString(abcLoginDTO.getClientId())+"_NAME", abcLoginDTO.getUsername());

        getMap.put(Integer.toString(abcLoginDTO.getClientId())+"_ID", abcLoginDTO.getClientId());

        getMap.put(Integer.toString(abcLoginDTO.getClientId())+"_ID", abcLoginDTO.getUserId());

        getMap.put(Integer.toString(abcLoginDTO.getClientId())+"_TIME", abcuserLoginDTO.getLocktime());

    }


查看完整回答
反對(duì) 回復(fù) 2023-06-28
  • 3 回答
  • 0 關(guān)注
  • 199 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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