百度后看了一些解法,效率雖可能比較高,但相對代碼太復雜,不便於閱讀與代碼交接,自己寫了下,方法如下。
方法一:
private void checkOverlap(LinkedList<ActiveExtendDTO> activeExtendDOList) { activeExtendDOList.sort(Comparator.comparing(ActiveExtendDTO::getCommodityMinNum)); Long temp = activeExtendDOList.poll().getCommodityMaxNum(); for (ActiveExtendDTO activeExtend : activeExtendDOList) { if (temp >= activeExtend.getCommodityMinNum()) { throw new Exception("區間有重疊"); } temp = activeExtend.getCommodityMaxNum(); } }
方法二(1.8):
private void checkOverlap2(List<ActiveExtendDTO> list) { list.stream().sorted(Comparator.comparing(ActiveExtendDTO::getCommodityMinNum)) .reduce((a, b) -> { if (a.getCommodityMaxNum() >= b.getCommodityMinNum()) { throw new Exception("區間有重疊"); } return b; }); }
附ActiveExtendDTO類:
@Data public class ActiveExtendDTO { @ApiModelProperty(value = "最小數量") @NotBlank(message = "最小數量不可為空") private Long commodityMinNum; @ApiModelProperty(value = "最大數量") @NotBlank(message = "最大數量不可為空") private Long commodityMaxNum; }