亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

在 java 中展平嵌套的 N 級嵌套對象

在 java 中展平嵌套的 N 級嵌套對象

汪汪一只貓 2022-08-17 15:36:10
我有一個java類class Example{    String field1;    String field2;    List<Example> subExamples;     }在上面的場景中,示例具有子示例,這又是示例列表。此嵌套可以是 n 級。我想實現的是有一個示例列表,即平展上述對象并將所有示例收集到最終列表中(收集所有n級示例)。一種明顯的方法是遞歸。在Java中,有什么方法可以更有效地實現它。我嘗試了一些java 8概念,但它們不符合要求。
查看完整描述

3 回答

?
慕后森

TA貢獻1802條經驗 獲得超5個贊

您可以使用的簡單方法:


static Stream<Example> flatten(Example ex) {

    if (ex.getSubExamples() == null || ex.getSubExamples().isEmpty()) {

        return Stream.of(ex);

    }


    return Stream.concat(Stream.of(ex), 

                ex.getSubExamples().stream().flatMap(Main::flatten));

}

您可以將其用作


List<Example> flattened = examples.stream()

        .flatMap(Main::flatten) //change class name

        .collect(Collectors.toList());


查看完整回答
反對 回復 2022-08-17
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

例如:


private static Stream<Example> flat(Example example) {

    return Stream.concat(Stream.of(example),

                         example.getSubExamples().stream().flatMap(Sandbox::flat));

}

where 是定義方法的類。Sandboxflat


查看完整回答
反對 回復 2022-08-17
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

這可以通過非遞歸方式完成:


private Collection<Example> flatten(Example example) {

  Queue<Example> work = new ArrayDeque<>();

  if (example != null) {

    work.offer(example);

  }

  Collection<Example> flattened = new ArrayList<>();

  while(!work.isEmpty()) {

    Example cur = work.poll();

    flattened.add(cur);

    cur.subExamples.forEach(work::offer);

  }

  return flattened;

}


查看完整回答
反對 回復 2022-08-17
  • 3 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號