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

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

需要根據(jù)父子關(guān)系將數(shù)據(jù)列表轉(zhuǎn)換為列表列表

需要根據(jù)父子關(guān)系將數(shù)據(jù)列表轉(zhuǎn)換為列表列表

當(dāng)年話下 2023-04-13 15:20:34
我需要根據(jù)父子關(guān)系將數(shù)據(jù)列表轉(zhuǎn)換為列表列表。如果 parent 為 null 落入一級(jí),則二級(jí)將基于一級(jí) id。我的數(shù)據(jù)如下所示:[    {id:1, parent: null },    {id:2, parent: 1 },    {id:3, parent: 1 },    {id:4, parent: 1 },    {id:5, parent: 2 },    {id:6, parent: 2 },    {id:7, parent: 3 },    {id:8, parent: 3 },    {id:9, parent: 4 },    {id:10, parent: 4 },    {id:11, parent: 5 },    {id:12, parent: null },    {id:13, parent: 12 },]我的代碼是:響應(yīng)數(shù)據(jù)Map<String,Map<String,ResponseData>> map = new HashMap<>();for (ResponseData responseData : responseDataList) {    Map<String,responseData> responseDatasMap =  map.get(responseData.getParent());    if(responseDatasMap != null) {        responseDatasMap.put(responseData.getId(),responseData);        map.put(responseData.getParent(),responseDatasMap);    } else {        responseDatasMap =  new HashMap<>();        responseDatasMap.put(responseData.getParent(),responseData);        map.put(responseData.getParent(),responseDatasMap);    }}上面的地圖將包含父級(jí)作為鍵和映射到父級(jí)的值的地圖List<List<ResponseData>> sections = new ArrayList<>();for (Map.Entry<String,Map<String, ResponseData>> responseDataMap : map.entrySet()) {    Map<String, ResponseData> valueMap = responseDataMap.getValue();    responseDataList = new ArrayList<>();    for(Map.Entry<String, ResponseData> responseData :valueMap.entrySet()) {        responseDataList.add(responseData.getValue());    }    sections.add(responseDataList);}我的輸出如下所示:[    [ {id:1, parent: null } ],    [ {id:2, parent: 1 },{id:3, parent: 1 },{id:4, parent: 1 } ],    [ {id:5, parent: 2 },{id:6, parent: 2 } ],    [ {id:7, parent: 3 },{id:8, parent: 3 } ],    [ {id:9, parent: 4 },{id:10, parent: 4 } ],    [ {id:11, parent: 5 }]]請(qǐng)檢查并讓我知道我們?nèi)绾螌?shí)施。提前致謝
查看完整描述

1 回答

?
PIPIONE

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

為了表示樹(shù)結(jié)構(gòu),我使用了ArrayList,其中節(jié)點(diǎn)的索引等于其在數(shù)組中的索引 + 1。如果您有稀疏樹(shù)/某些索引可能丟失,請(qǐng)使用映射的等效方法。


使用 Java 8 流 API 的解決方案:


public static void main( String[] args ) {

        List<ResponseData> responseDataList = Arrays.asList(

            new ResponseData( 1, -1 ),  // changed null to -1 as null can't be a map key

            new ResponseData( 2, 1 ),

            new ResponseData( 3, 1 ),

            new ResponseData( 4, 1 ),

            new ResponseData( 5, 2 ),

            new ResponseData( 6, 2 ),

            new ResponseData( 7, 3 ),

            new ResponseData( 8, 3 ),

            new ResponseData( 9, 4 ),

            new ResponseData( 10, 4 ),

            new ResponseData( 11, 5 ),

            new ResponseData( 12, -1 ),

            new ResponseData( 13, 12 )

        );

        final Map<Integer, List<ResponseData>> map = responseDataList.stream()

                .collect( Collectors.groupingBy( o -> getLevel( responseDataList, o, 0 ) ) );

        System.out.println( map );

        // To convert the Map to a List of Lists:

        System.out.println( new ArrayList<>( map.values() ));

    }


    private static int getLevel(List<ResponseData> nodes, ResponseData responseData, int level) {

        if( responseData.parent == -1 ) {

            return level;

        } else {

            return getLevel( nodes, nodes.get( responseData.parent - 1 ), level + 1 );  // -1 to adjust index

        }

    }


    private static final class ResponseData {

        public int id;

        public int parent;


        public ResponseData( int id, int parent ) {

            this.id = id;

            this.parent = parent;

        }


        @Override

        public String toString() {

            return String.format( "{id: %d, parent: %d}", id, parent );

        }

    }

此外,此代碼期望您的樹(shù)確實(shí)是一棵樹(shù)。如果有任何循環(huán),它將無(wú)限循環(huán),最終因堆棧溢出而失敗。


查看完整回答
反對(duì) 回復(fù) 2023-04-13
  • 1 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專(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)