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

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

如何處理具有復(fù)雜數(shù)據(jù)結(jié)構(gòu)的嵌套 for 循環(huán)?

如何處理具有復(fù)雜數(shù)據(jù)結(jié)構(gòu)的嵌套 for 循環(huán)?

ITMISS 2023-04-26 16:05:50
需要遍歷一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并從算法中修改外部變量。我試圖用流來(lái)做,但據(jù)我所知它不是線程安全的,可能是競(jìng)爭(zhēng)條件......有沒有比下面復(fù)制的方法更好的方法?List<ObjectA> externalVariable = new ArrayList<>();List<ObjectA> externalVariable2 = new ArrayList<>();if (objectA != null) {    externalVariable.add(objectA);    for (ObjectB objectB : objectA) {        if (objectB.getObjectC() != null) {            for (ObjectD objectD : objectB.getObjectC()) {                if (objectD.getObjectE() != null) {                    for (ObjectE objectE : objectD.getObjectE()) {                        if (objectE.getObjectF() != null) {                            for (ObjectG objectG : objectE.getObjectF()) {                                objectG.setSomething("BlaBla");                                if (objectG.getOjectH() != null && objectG.getOjectH().getObjectI() != null) {                                    for (ObjectI objectI : objectG.getOjectH().getObjectI()) {                                        externalVariable2.add(objectI);                                        ObjectJ objectJ = getRelevantOjectJ(objectA.getId(), objectI.getId());                                        objectI.setObjectJ(objectJ);                                    }                                }                            }                        }                    }                }            }        }    }}
查看完整描述

1 回答

?
波斯汪

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

當(dāng)多個(gè)線程同時(shí)執(zhí)行修改共享狀態(tài)的語(yǔ)句時(shí),就會(huì)出現(xiàn)競(jìng)爭(zhēng)條件。

如果您當(dāng)前的代碼是線程安全的,那么在您不使用并行流功能時(shí)它仍然會(huì)與流一起使用。

關(guān)于您的實(shí)際代碼:我們可以認(rèn)為它是箭頭代碼,不易閱讀和維護(hù)。


你有不同的方法來(lái)減少全局嵌套,但我不鼓勵(lì)在這里使用流,因?yàn)槟悴皇占Y(jié)果,而是改變外部對(duì)象。這不是流的用例。


您可以在當(dāng)前代碼中聲明您顯式地迭代了許多集合,而應(yīng)用邏輯并不關(guān)心其中的大部分。


在這里,所有執(zhí)行的只是為了獲取ObjectG實(shí)例,其余的沒有使用 then :


for (ObjectB objectB : objectA) {

    if (objectB.getObjectC() != null) {

        for (ObjectD objectD : objectB.getObjectC()) {

            if (objectD.getObjectE() != null) {

                for (ObjectE objectE : objectD.getObjectE()) {

                    if (objectE.getObjectF() != null) {

                        for (ObjectG objectG : objectE.getObjectF()) {

因此,將所有這些封裝到一個(gè)收集ObjectG實(shí)例并返回它們的方法中。

請(qǐng)注意,它可以在沒有流的情況下編寫,但也可以使用,因?yàn)槭占鼈儾恍枰薷墓蚕頎顟B(tài)。


最后你的方法可以簡(jiǎn)化為:


Collection<ObjectG> objectsG = collectG(objectA); // extracted method


for (ObjectG objectG : objectsG) {

    objectG.setSomething("BlaBla");


    if (objectG.getOjectH() != null && objectG.getOjectH().getObjectI() != null) {

        for (ObjectI objectI : objectG.getOjectH().getObjectI()) {

            externalVariable2.add(objectI);

            ObjectJ objectJ = getRelevantOjectJ(objectA.getId(), objectI.getId());

            objectI.setObjectJ(objectJ);

        }

    }


查看完整回答
反對(duì) 回復(fù) 2023-04-26
  • 1 回答
  • 0 關(guān)注
  • 111 瀏覽
慕課專欄
更多

添加回答

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