在java中查找列表中的第一个元素8
问题描述:
如何在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;
}
}
答
您可以用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);
由于霍尔格建议,你可以把它较少受到丑用三元条件表达式替换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);
样本在做什么?什么不工作?解释你的问题是详细的 – proton
而不是要求其他人为你做你的任务,试图自己写,并在这里问你是否遇到了实际问题。 – andrel