续对Stream API结合Lambda 表达式学习及总结(1)
eg3:功能介绍:
这行代码是在使用 Java 的 Stream API 来处理一个名为 loanOrderList 的集合(很可能是贷款订单的列表)。该代码的目的是检查集合中是否至少有一个元素(即贷款订单)满足特定条件。这里的特定条件包括两个主要的判断逻辑:
loanOrderList.stream().anyMatch(o -> Objects.equals(MiddleConstant.LoanOrderRiskSts.CREDIT_PASS.getValue(), o.getRiskSts()) && revolvingCreditService.getByLoanId(o.getId())
详细解析:
loanOrderList.stream().anyMatch(...)
loanOrderList 是一个包含贷款订单的列表。
stream() 方法将列表转换成流,以便进行后续的流操作。
anyMatch 是一个终端操作,它接受一个谓词(即一个返回布尔值的函数)作为参数。该方法会检查流中的元素是否有至少一个满足提供的谓词。如果找到这样的元素,anyMatch 立即返回 true;如果没有找到或者流是空的,它返回 false。
o -> Objects.equals(MiddleConstant.LoanOrderRiskSts.CREDIT_PASS.getValue(), o.getRiskSts()) && revolvingCreditService.getByLoanId(o.getId())
这是一个 Lambda 表达式,用于定义 anyMatch 方法需要的谓词。
Objects.equals(MiddleConstant.LoanOrderRiskSts.CREDIT_PASS.getValue(), o.getRiskSts())
使用 Objects.equals 方法比较两个值是否相等。这里比较的是来自 MiddleConstant.LoanOrderRiskSts.CREDIT_PASS.getValue() 的值与每个贷款订单对象 o 的风险状态 (getRiskSts())。
MiddleConstant.LoanOrderRiskSts.CREDIT_PASS 是一个枚举
revolvingCreditService.getByLoanId(o.getId())
调用 revolvingCreditService.getByLoanId 方法,传入贷款订单的 ID (o.getId())。
eg4:功能介绍:
这段代码使用了Java的Stream API来处理一个名为accountStageList的集合,先按期数倒序排序,再按顺序取第一个已还款的账单
Optional<AccountStageEntity> first = accountStageList.stream()
.sorted((o1, o2) -> o2.getTheStageNum() - o1.getTheStageNum())
.filter(o -> AccountConstant.AccountRepayStsEnum.getByCode(o.getSts()).isSettledSts())
.findFirst();
详细解析:
accountStageList.stream()
accountStageList可能是一个包含AccountStageEntity对象的列表。
stream()方法将列表转换成流,使其可以进行一系列的流操作。
.sorted((o1, o2) -> o2.getTheStageNum() - o1.getTheStageNum())
这里使用sorted方法对流中的元素进行排序。
排序逻辑是比较两个AccountStageEntity对象的theStageNum属性。通过(o1, o2) -> o2.getTheStageNum() - o1.getTheStageNum()实现,这是一个降序排序,因为对于每对元素o1和o2,如果o2的阶段号大于o1的,结果为正数,这会将o2排在o1前面。
.filter(o -> AccountConstant.AccountRepayStsEnum.getByCode(o.getSts()).isSettledSts())
filter方法用于筛选流中的元素。它接受一个返回布尔值的函数(谓词),只保留使该函数返回true的元素。
这里的谓词检查每个AccountStageEntity对象的状态(sts),并通过AccountConstant.AccountRepayStsEnum.getByCode(o.getSts()).isSettledSts()来判断这个状态是否是已结清状态。
AccountConstant.AccountRepayStsEnum.getByCode方法根据状态代码获取相应的枚举实例,isSettledSts()方法则检查该状态是否表示已结清。
.findFirst()
findFirst是一个终端操作,它返回流中的第一个元素作为一个Optional对象。
使用Optional是为了安全地处理可能的空值情况,即如果流为空(没有元素满足排序和过滤条件),findFirst会返回一个空的Optional,避免NullPointerException。
未完待续。。。。