2016-09-26 122 views
0

如何在java 8中編寫這種類型的代碼?我想使用流在Java8中編寫它。有沒有辦法呢?在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

樣本在做什麼?什麼不工作?解釋你的問題是詳細的 – proton

+2

而不是要求其他人爲你做你的任務,試圖自己寫,並在這裏問你是否遇到了實際問題。 – andrel

回答

2

您可以用mapmapToIntfilterfindFirst組合做到這一點,但它不會那麼漂亮:

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); 

由於霍爾格建議,你可以把它較少受到醜用三元條件表達式替換if語句:

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(「Condition1」)?1:e.equals(「Condition2」)?2:e.equals(「Condition3」)?3:0)' – Holger

+0

@Holger更好: ) – Eran

相關問題