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

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

如何將列表轉(zhuǎn)換為 Map 的 Map Map<String, Map<String,Object>>

如何將列表轉(zhuǎn)換為 Map 的 Map Map<String, Map<String,Object>>

FFIVE 2023-11-01 22:46:14
我有一個(gè)List<Employee>e,我想將其轉(zhuǎn)換為 Map<String, Map<String,Emp>> 外部字符串應(yīng)為“Name”而內(nèi)部字符串應(yīng)為“Domain”的位置。       Name Id Domaine(0) - Emp1, 1, Insurancee(1) - Emp1, 2, Salese(2) - Emp2, 3, Salese(3) - Emp4, 4, Marketing我嘗試了以下方法-e.stream().collect(Collectors.groupingBy(                                   Employee::getName,                                   toMap(Employee::getDomain,Emp)));所以預(yù)期的輸出圖應(yīng)該是這樣的<Emp1>     <Insurance, e(0)>     <Sales, e(1)><Emp2>     <Sales, e(2)><Emp4>     <Marketing, e(3)>但我只得到獨(dú)特的值,實(shí)際輸出-<Emp1>     <Insurance, e(0)><Emp2>     <Sales, e(2)><Emp4>     <Marketing, e(3)>有人可以告訴最好的方法嗎?
查看完整描述

2 回答

?
小唯快跑啊

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

您最需要尋找的是嵌套分組,例如:


Map<String, Map<String, List<Employee>>> groupedMap = employees.stream()

        .collect(Collectors.groupingBy(Employee::getName,

                Collectors.groupingBy(Employee::getDomain, Collectors.toList())));

注- 這些值是List<Employee>按姓名分組的員工,然后按域分組的員工。(兩者都同樣加入到一個(gè)列表中。)


如果您嚴(yán)格遵守讓單個(gè)員工與指定的分組相對(duì)應(yīng),那么只需稍作修改,代碼就對(duì)我來(lái)說(shuō)非常有效:


Map<String, Map<String, Employee>> groupedReducedMap = employees.stream()

        .collect(Collectors.groupingBy(Employee::getName,

                Collectors.toMap(Employee::getDomain,

                        Function.identity(), // value as the employee instance

                        (a, b) -> a))); // choose first instance for similar 'domain'


查看完整回答
反對(duì) 回復(fù) 2023-11-01
?
慕神8447489

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

由于輸出應(yīng)該是Map<String, Map<String,Employee>>而不是Map<String, Map<String,List<Employee>>>(即根據(jù)您請(qǐng)求的輸出,不能有兩個(gè)Employee具有相同名稱和相同域的 s),您可以鏈接兩個(gè)groupingBy,然后使用它reducing來(lái)確保每個(gè)內(nèi)部組將有一個(gè)Employee而不是一個(gè)List<Employee>:


Map<String, Map<String,Optional<Employee>>> output =

    e.stream()

     .collect(Collectors.groupingBy(Employee::getName,

                                    Collectors.groupingBy(Employee::getDomain,

                                                          Collectors.reducing((x1,x2)->x2))));

這個(gè)版本的問(wèn)題reducing是它返回一個(gè)Optional<Employee>而不是Employee,即使我們知道Optional永遠(yuǎn)不會(huì)為空。


我們可以通過(guò)以下方式解決這個(gè)問(wèn)題:


  Map<String, Map<String,Employee>> output =

      e.stream()

       .collect(Collectors.groupingBy(Employee::getName,

                                      Collectors.groupingBy(Employee::getDomain,

                                                            Collectors.reducing(e.get(0),

                                                                                (x1,x2)->x2))));

現(xiàn)在,我們使用具有標(biāo)識(shí)值的變體reducing,向其傳遞任意Employee實(shí)例(哪個(gè)實(shí)例并不重要,因?yàn)樗偸菚?huì)被正確的實(shí)例替換)。


查看完整回答
反對(duì) 回復(fù) 2023-11-01
  • 2 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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