2016-04-26 9 views
0

Wie können wir die folgenden Verwendung von Streams und Filtern darstellen. Vielen Dank.Mehrere ifs in einem Stream mit Filtern

for (UIDisplayItem uiDisplayItem : uiDisplayItems) { 
    if ("8929".equals(uiDisplayItem.getProductSpecCharacteristicID())) { 
     type1 = uiDisplayItem.getValue(); 
    } 
    if ("5121".equals(uiDisplayItem.getProductSpecCharacteristicID())) { 
     type2 = uiDisplayItem.getValue(); 
    } 
    if ("4981".equals(uiDisplayItem.getProductSpecCharacteristicID())) { 
     type3 = uiDisplayItem.getValue(); 
    } 
    if ("501".equals(uiDisplayItem.getProductSpecCharacteristicID())) { 
     type4 = uiDisplayItem.getValue(); 
    } 
} 
+1

Sie dies nicht tun. Weil dies sicherlich Teil eines viel größeren Code-Stücks ist. Streams und Filter sind kein Zauberstab, der jede Codezeile verschönert. Sie müssen genau sagen, was Sie hier tun möchten. – Tunaki

+0

Und sicher nicht ein Stück Code wie du hier hast: Ich kann schon 4 Nebenwirkungen zählen. – Tunaki

+0

Sie können stattdessen eine Anweisung 'switch' verwenden. Ein komplettes Redesign, um den Bedarf für einen solchen Vergleich zu eliminieren, ist jedoch viel mehr zu empfehlen. – Holger

Antwort

0

Sie können ersetzen "für" mit "forEach" und wie unten etwas tun:

list.forEach(item -> 
     { 
      if ("8929".equals(item.getProductSpecCharacteristicID())) { 
       type1 = item.getValue(); 
      } 
      if ("5121".equals(item.getProductSpecCharacteristicID())) { 
       type2 = item.getValue(); 
      } 
      if ("4981".equals(item.getProductSpecCharacteristicID())) { 
       type3 = item.getValue(); 
      } 
      if ("501".equals(item.getProductSpecCharacteristicID())) { 
       type4 = item.getValue(); 
      } 
     });