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

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

使用流遞歸展平列表

使用流遞歸展平列表

縹緲止盈 2021-10-28 15:50:35
我有內(nèi)部節(jié)點(diǎn)和終端節(jié)點(diǎn)的樹(shù)狀結(jié)構(gòu):public interface Node{}public class InternalNode implements Node {    private List<Node> nodes;}public class TerminalNode implements Node {    private String label;}我現(xiàn)在有一個(gè)List<Node>我想壓平的。在這里,展平意味著我想用它的孩子遞歸地替換一個(gè)內(nèi)部節(jié)點(diǎn),直到所有內(nèi)部節(jié)點(diǎn)都被終端替換。我想出了這個(gè)功能:private static List<Node> flatten(final List<Node> nodes) {    return nodes            .stream()            .map(node -> {                if (node instanceof InternalNode) {                    return flatten(((InternalNode) node).getNodes());                }                return Collections.singletonList(node);            })            .flatMap(List::stream)            .collect(Collectors.toList());}這似乎完成了它的工作。但是,我想知道是否有更好的實(shí)現(xiàn)方式。我首先必須將 a 包裝TerminalNode成一個(gè)單例列表(類(lèi)型List<TerminalNode>) via Collections.singletonList(node),然后我必須再次將該單例列表轉(zhuǎn)換回節(jié)點(diǎn),這似乎很奇怪flatMap(List::stream)。有沒(méi)有辦法避免這種無(wú)用的情況,Collections.singletonList(node)然后flatMap(List::stream)是終端節(jié)點(diǎn)?
查看完整描述

1 回答

?
慕工程0101907

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

你可以直接使用 flatMap :


private static Stream<TerminalNode> flatten(final List<Node> nodes) {

    return nodes

            .stream()

            .flatMap(node -> {

                if (node instanceof InternalNode) {

                    return flatten(((InternalNode) node).getNodes());

                }

                return Stream.of((TerminalNode) node);

            });

}

如果你想要一個(gè)列表,你可以只收集該方法調(diào)用的結(jié)果。


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