java Lambda妙用-从集合中过滤最适合的一条记录

List<Predicate<LabItemRange>> filterList = new ArrayList<>();
filterList.add(e->compareCode(e,report)&&compareAge(e,report)&&compareSex(e,report));
filterList.add(e ->Objects.isNull(e.getSex())&&compareCode(e,report)&&compareAge(e,report));
filterList.add(e ->Objects.isNull(e.getLowAge())&&Objects.isNull(e.getHighAge())&&compareCode(e,report)&&compareSex(e,report));
filterList.add(e ->Objects.isNull(e.getHighAge())&&Objects.isNull(e.getLowAge())&&Objects.isNull(e.getSex())&&compareCode(e,report));
filterList.add(e ->Objects.isNull(e.getSampleCode())&&compareAge(e,report)&&compareSex(e,report));
filterList.add(e ->Objects.isNull(e.getSampleCode())&&Objects.isNull(e.getSex())&&compareAge(e,report));
filterList.add(e ->Objects.isNull(e.getSampleCode())&&Objects.isNull(e.getLowAge())&&Objects.isNull(e.getHighAge())&&compareSex(e,report));
filterList.add(e ->Objects.isNull(e.getSampleCode())&&Objects.isNull(e.getLowAge())&&Objects.isNull(e.getHighAge())&&Objects.isNull(e.getSex()));
final LabItemRange[] labItemRange = { null };
filterList.forEach(i->{
	if (labItemRangeList.stream().anyMatch(i)) {
		labItemRange[0] = labItemRangeList.stream().filter(i).findFirst().get();
	}
});
return labItemRange[0];
private boolean compareCode(LabItemRange itemRange,Report report){
	if (itemRange.getSampleCode()==null||report.getSampleCode()==null) {
		return false;
	}
	return Objects.equals(itemRange.getSampleCode(),report.getSampleCode());
}
private boolean compareAge(LabItemRange itemRange,Report report){
	Integer age = report.getAge();
	Integer ageUnit = report.getAgeUnit();
	Integer lowAge = itemRange.getLowAge();
	Integer highAge = itemRange.getHighAge();
	Integer lowAgeUnit = itemRange.getLowAgeUnit();
	Integer highAgeUnit = itemRange.getHighAgeUnit();
	if (age==null||ageUnit==null||lowAge==null||highAge==null||lowAgeUnit==null||highAgeUnit==null) {
		return false;
	}
	long ageSecond = age * AlisDateUtils.getSecondsByAgeUnit(ageUnit);
	long lowAgeSecond = lowAge * AlisDateUtils.getSecondsByAgeUnit(lowAgeUnit);
	long hignAgeSecond = highAge * AlisDateUtils.getSecondsByAgeUnit(highAgeUnit);
	return ageSecond>=lowAgeSecond&&ageSecond<=hignAgeSecond;
}
private boolean compareSex(LabItemRange itemRange,Report report){
	if (itemRange.getSex()==null||report.getSex()==null) {
		return false;
	}
	return Objects.equals(itemRange.getSex(),report.getSex());
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十步杀一人_千里不留行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值