2016-09-26 2 views
0

Wie schreibe ich diese Art von Code in Java 8? Ich möchte dies in Java8 mit Stream schreiben. Gibt es einen Weg dafür?Finden erste Element aus der Liste in Java 8

List<SomeDTO> someDTOList = sample.getSomeDTO(); 
int a=0; 
for(SomeDTO sample : someDTOList ){ 
    String someElement = sample .getSomeElement(); 
    if(someElement.equals("Condition1"){ 
     a=1; 
     break; 
    } 
    if(someElement.equals("Condition2"){ 
     a=2; 
     break; 
    } 
    if(someElement.equals("Condition3"){ 
     a=3; 
     break; 
    } 
} 
+1

Was macht die Probe? Was geht nicht? erklären Sie Ihre Frage ist Detail – proton

+2

Anstatt andere Leute bitten, Ihre Aufgabe für Sie zu tun, versuchen Sie es selbst zu schreiben und fragen Sie hier, wenn Sie auf ein tatsächliches Problem stoßen. – andrel

Antwort

2

Sie können es mit einer Kombination aus map, mapToInt, filter und findFirst, aber es wird nicht so schön sein:

int a = 
    sample.getSomeDTO() 
      .stream() 
      .map(SomeDTO::getSomeElement) 
      .mapToInt(e -> { 
       if (e.equals("Condition1")) 
        return 1; 
       else if (e.equals("Condition2")) 
        return 2; 
       else if (e.equals("Condition3")) 
        return 3; 
       else 
        return 0; 
      }) 
      .filter(a -> a > 0) 
      .findFirst() 
      .orElse(0); 

Wie Holger vorgeschlagen, können Sie es weniger hässlich durch Ersetzen der if-Anweisungen durch ternäre Bedingungsausdrücke:

int a = 
    sample.getSomeDTO() 
      .stream() 
      .map(SomeDTO::getSomeElement) 
      .mapToInt(e -> e.equals("Condition1") ? 1 : e.equals("Condition2") ? 2 : e.equals("Condition3") ? 3 : 0) 
      .filter(a -> a > 0) 
      .findFirst() 
      .orElse(0); 
+0

'.mapToInt (e -> e.equals (" Bedingung1 ")? 1: e.equals (" Bedingung2 ")? 2: e.equals (" Bedingung3 ")? 3: 0)' – Holger

+0

@Holger Viel besser:) – Eran

Verwandte Themen