[英]Refactor for loop using java 8 streams
I want to replace below for loop with java 8 streams.我想用 java 8 流替换下面的 for 循环。 Any help will be much appreciated.
任何帮助都感激不尽。 Thank you.
谢谢你。
OwnerEntity oEntity = new OwnerEntity();
// sorted set based on last change date descending order
Set<StatusModel> stsModels = getStatsModelSetSortedByChangeDateDesc();
for (int i = 0; i < stsModels.size(); i++) {
StatusModel sts = stsModels.get(i);
if (i == 0 && !sts.getStatus().equals("0")) {
// only for first lelement in the list status is '0' then break
//do not process the list further
break;
}
// otherwise add the elements of the list to OwnerEntity Object
if (sts.egtStatus() != null && (acctNumber.equalsIgnoreCase(sts.getAccountNumber()))) {
oEntity.addStatusModel(sts);
}
}
I would suggest something like this:我会建议这样的事情:
OwnerEntity oEntity = new OwnerEntity();
// sorted set based on last change date descending order
Set<StatusModel> stsModels = getStatsModelSetSortedByChangeDateDesc();
if (stsModels.size() > 0 && !stsModels.get(0).equals("0")) {
stsModels.stream()
.filter(sts -> sts.egtStatus() != null && (acctNumber.equalsIgnoreCase(sts.getAccountNumber())))
.forEach(sts -> oEntity.addStatusModel(sts));
}
I think you should have 2 steps, first check if first have status not equals to 0我认为你应该有 2 个步骤,首先检查是否第一个状态不等于 0
If exists than filter the other conditions如果存在则过滤其他条件
//retrive first element if status not 0
List<StatusModel> result = new ArrayList<>();
Optional<StatusModel> firstElement =
stsModels.stream()
.findFirst()
.filter(f -> !f.getStatus().equals("0"));
if(firstElement.isPresent()) {
//other stream with logic
result= stsModels.stream()
.filter(f -> f.getStatus() != null
&& accountnumber.equalsIgnoreCase(f.getGetAccountNumber()))
.collect(Collectors.toList());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.