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

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

java中列表列表中的列表元素分組

java中列表列表中的列表元素分組

尚方寶劍之說 2021-12-01 15:57:49
我有一個(gè)元素列表。我想根據(jù)某些條件將此列表的元素分組為一個(gè)列表列表。是否可以在 java 中輕松完成?public class CollectionTest {    public static void main(String[] arg) {        Target target0 = new Target();        target0.setRisklevel("III");        target0.setLocation("Combined");        Target target1 = new Target();        target1.setRisklevel("III");        target1.setLocation("Combined");        Target target2 = new Target();        target2.setRisklevel("III");        target2.setLocation("Combined");        Target target3 = new Target();        target3.setRisklevel("III");        target3.setLocation("Combined");        Target target4 = new Target();        target4.setRisklevel("IV");        target4.setLocation("Combined");        Target target5 = new Target();        target5.setRisklevel("IV");        target5.setLocation("Combined");        Target target6 = new Target();        target6.setRisklevel("IV");        target6.setLocation("Combined");        Target target7 = new Target();        target7.setRisklevel("II");        target7.setLocation("Domestic");        Target target8 = new Target();        target8.setRisklevel("IV");        target8.setLocation("Domestic");        Target target9 = new Target();        target9.setRisklevel("IV");        target9.setLocation("Domestic");        Target target10 = new Target();        target10.setRisklevel("IV");        target10.setLocation("Domestic");        Target target11 = new Target();        target11.setRisklevel("IV");        target11.setLocation("Domestic");    }}這里的條件是 RiskLevel 和 Location 在 List 列表中的每個(gè)列表中必須相同。所以 fullList 應(yīng)該有 4 個(gè)列表(第 1 個(gè) III 和組合,第 2 個(gè) IV 和組合,第 3 個(gè) II 和國(guó)內(nèi),第 4 個(gè) IV 和國(guó)內(nèi))。我可以遍歷列表并設(shè)置值。有沒有更簡(jiǎn)單的方法來使用 java8 或 apache commons 來做到這一點(diǎn)?
查看完整描述

3 回答

?
紅顏莎娜

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

根據(jù)您的描述,fullList 中應(yīng)該有 4 個(gè)列表(第 1 個(gè) III 和組合、第 2 個(gè) IV 和組合、第 3 個(gè) II 和國(guó)內(nèi)、第 4 個(gè) IV 和國(guó)內(nèi))我假設(shè)您正在尋找這個(gè):


Function<Target, List<String>> riskLevelAndLocation = t -> List.of(t.getRiskLevel(), t.getLocation());

Map<List<String>, List<Target>> fullList = ucrtargetList.stream()

        .collect(Collectors.groupingBy(riskLevelAndLocation));

riskLevelAndLocation是 a Function,它返回一個(gè)List包含riskLeveland location。groupingBy一個(gè)List作品因?yàn)長(zhǎng)ist.equals(Object o)


返回true當(dāng)且僅當(dāng)該指定的對(duì)象也是一個(gè)列表,兩個(gè)列表具有相同的大小,并且在兩個(gè)列表元素的所有相應(yīng)的對(duì)是相等。


快速檢查:


for (Entry<List<String>, List<Target>> entrySet : fullList.entrySet()) {

    System.out.println(entrySet.getKey().toString() + ": " + entrySet.getValue().size());

}

輸出是:


[IV, Combined]: 3

[II, Domestic]: 1

[III, Combined]: 4

[IV, Domestic]: 4

如果fullList必須具有您描述的順序,那么您可以使用 aLinkedHashMap并對(duì)其進(jìn)行排序。


查看完整回答
反對(duì) 回復(fù) 2021-12-01
?
慕俠2389804

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

還不能發(fā)表評(píng)論,所以添加一個(gè)答案,以擴(kuò)展@Schedu Luca 的回答,'groupingBy' 子句可以鏈接起來,像這樣

Map<String, List<Target>> collect = ucrtargetList.stream()
           .collect(Collectors.groupingBy(Target::getRisklevel, Collectors.groupingBy(Target::getLocation)));



查看完整回答
反對(duì) 回復(fù) 2021-12-01
?
米脂

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

List<List<Target>> fullList = ucrtargetList.stream()
                .collect(Collectors.groupingBy(Target::getRisklevel)) // Or another collector
                .entrySet()
                .stream()
                .map(Map.Entry::getValue)
                .collect(Collectors.toList());

如果要從結(jié)果中刪除相同的對(duì)象,則需要添加方法 'equals' 和 'hashcode' 并收集到 Set。


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

添加回答

舉報(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)