我是Java 8的新手,我有一个response对象,它有一个detail对象列表,detail对象包含一个reason对象列表,reason对象有一个reason代码。我尝试从response对象迭代到reason对象,并搜索是否有任何与给定关键字相等的原因代码。你能帮助我在java8中以最小的复杂度做到这一点吗?下面是java7中的示例方法,不是你最好的方法。
if(response != null && CollectionsUtil.isNotEmpty(response.getDetails())) {
List<Detail> details = response.getDetails();
for(Detail det : details) {
if(CollectionsUtil.isNotEmpty(det.getReasons())) {
for(Reason reason: det.getReasons()) {
if(StringUtils.equalsIgnoreCase("ABC", reason.getReasonCode())) {
///////////call an external method
}
}
}
}
}发布于 2018-11-14 04:01:03
假设getReasons()返回一个List
details.stream().
flatMap(e -> e.getReasons().stream()).
filter(reason -> StringUtils.equalsIgnoreCase("ABC", reason.getReasonCode())).
forEach(System.out::println);将System.out::println替换为您想要调用的方法。还要注意的是,我删除了对CollectionsUtil.isNotEmpty(det.getReasons())的检查,就好像列表是空的一样,这不会有任何区别
https://stackoverflow.com/questions/53288306
复制相似问题