如何在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;
}
}
答案 0 :(得分:2)
您可以将map
,mapToInt
,filter
和findFirst
组合使用,但它不会那么漂亮:
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);