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);
}
}
添加回答
舉報(bào)