2016-09-26 100 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

相关问题