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

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

遞歸檢索列表中的所有元素

遞歸檢索列表中的所有元素

森林海 2022-04-28 16:00:55
我有一個(gè)這樣定義的“工作”類(lèi):public class Job extends AbstractJob{    private String name;    private String jobCount;    private String status;    private List<Job> children;    public Job(String name, String jobCount, String status, List<Job> children) {        this.name = name;        this.jobCount = jobCount;        this.status = status;        this.children = children;    }    public String getName()    {        return name;    }    public String getJobCount()    {        return jobCount;    }    public String getStatus()    {        return status;    }    public List<Job> getChildren() {        return children;    }    public void setName(String name) {        this.name = name;    }    public void setJobCount(String jobCount) {        this.jobCount = jobCount;    }    public void setStatus(String status) {        this.status = status;    }    public void setChildren(List<Job> children) {        this.children = children;    }}我想做的是能夠檢索工作列表中的所有元素,包括他們的孩子。這是我到目前為止所做的:   public List<Job> getJobChildren(Job job) {        List<Job> result = new ArrayList<Job>();        if (job == null) {            return new ArrayList<Job>();        }        List<Job> children = job.getChildren();            for (Job k : children) {                if (children != null && !children.isEmpty()) {                    result.addAll(children);                    getJobChildren(k);                } else {                    result.add(k);                }            }            return result;    }在主類(lèi)中,我實(shí)例化并填充了 so 作業(yè)來(lái)測(cè)試它,但我得到了一個(gè) nullpointerException:Job job2 = new Job("JOB0002","0002","Finished",null);Job job3 = new Job("JOB0003","0003","Error",jobSubList);Job job4 = new Job("JOB0004","0004","En cours",null);jobSubList.add(job4);List<Job> jobList = new ArrayList<Job>();jobList.add(job2);jobList.add(job3);Job job = new Job("JOB0001","0001","En Cours",jobList);我知道為什么會(huì)出現(xiàn)異常,但我無(wú)法編輯該方法以使其返回所有孩子。這個(gè)想法是檢查所有的工作,看看他們是否也有自己的工作。如果他們這樣做了,我會(huì)更深入地檢索所有這些孩子,我會(huì)一直這樣做,直到我檢索到所有工作。你能告訴我我在那個(gè)方法中做錯(cuò)了什么嗎?
查看完整描述

2 回答

?
MM們

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

NullPointerException因?yàn)槟?for 循環(huán)開(kāi)始后對(duì)列表進(jìn)行空檢查children。應(yīng)該在進(jìn)入循環(huán)之前完成。另外,我注意到您沒(méi)有匯總結(jié)果,每次調(diào)用getJobChildren()您都會(huì)實(shí)例化一個(gè)新列表,并且您沒(méi)有在方法返回時(shí)將其添加到父調(diào)用中。


用于遍歷子列表(假設(shè)沒(méi)有循環(huán))的深度優(yōu)先遞歸算法可以如下:


public List<Job> getJobChildren(final Job job, final List<Job> result) {

    if (job == null) {

        return result;

    }


    result.add(job);

    if(job.getChildren() != null){

        for(Job current : job.getChildren()){

            getJobChildren(current, result);

        }

    }


    return result;

}

您需要使用新的 ArrayList 觸發(fā)第一次調(diào)用以收集結(jié)果。


List<Job> results = new ArrayList<>();

getJobChildren(parentJob, results);


// Use the results here.


查看完整回答
反對(duì) 回復(fù) 2022-04-28
?
白板的微信

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

您需要檢查空值:


    if (job.getChildren() != null) {

        for (Job k : children) {

job.getChildren() 可以為空。無(wú)需迭代空列表。


修正方法:


public static List<Job> getJobChildren(Job job) {


    List<Job> result = new ArrayList<Job>();

    if (job == null) {

        return new ArrayList<Job>();

    }

    List<Job> children = job.getChildren();

    if (job.getChildren() != null) {

        for (Job k : children) {

            if (children != null && !children.isEmpty()) {

                result.addAll(children);

                getJobChildren(k);

            } else {

                result.add(k);

            }

        }

    }

    return result;

}


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