从java 8中的列表中查找第一个元素

时间:2016-09-26 07:11:32

标签: list java-8

如何在java 8中编写这种类型的代码?我想用Java在Java8中编写这个。有什么办法吗?

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 个答案:

答案 0 :(得分: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);

正如Holger建议的那样,你可以通过用三元条件表达式替换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);