最近项目需求需要做一个档案管理系统,其中一个功能就是判断凭证是否断号。且将断号的号码找出来。
/**
* 判断短号
*
* @param nos 凭证号
* @return -> 第一各所断的号
*/
Long isBreak(List<Long> nos) {
//边界判断
if (nos.size() <= 1) {
return null;
}
//先进行一次排序
List<Long> sortList = nos.stream().sorted(Comparator.comparing(t -> t)).collect(Collectors.toList());
//第一个数+1与第二个数+1否相等,相等则OK,不等则有问题。
for (int i = 0; i < nos.size()-1; ++i) {
if (sortList.get(i) + 1 != sortList.get(i+1)) {
return sortList.get(i) + 1;
}
}
return null;
}
/**
* 判断短号
*
* @param nos 凭证号
* @return ->
*/
List<Long> isBreak(List<Long> nos) {
final Object[] objects = nos.toArray();
Arrays.sort(objects);
int length = objects.length;
Integer max = (Integer) objects[length - 1];
ArrayList<Long> integers = Lists.newArrayList();
//将所有的值从第一个数字生成
for (long min = (long) objects[0]; min <= max; min++) {
integers.add(min);
}
//返回缺失的数字
return integers.stream().filter(t -> !nos.contains(t)).collect(Collectors.toList());
}
/**
* 判断短号
*
* @param nos 凭证号
* @return ->
*/
List<Long> isBreak(List<Long> nos) {
final Object[] objects = nos.toArray();
Arrays.sort(objects);
int length = objects.length;
Integer max = (Integer) objects[length - 1];
Integer min = objects.get(0);
//如果最大了和最小的大于100个短号那就采用只获取第一个短号
if(max - min > 100){
for (int i = 0; i < nos.size()-1; ++i){
if (sortList.get(i) + 1 !=sortList.get(i+1)) {
return Arrays.asList(sortList.get(i) + 1);
}
}
return null;
}
ArrayList<Long> integers = Lists.newArrayList();
//将所有的值从第一个数字生成
for (long min = (long) objects[0]; min <= max; min++) {
integers.add(min);
}
//返回缺失的数字
return integers.stream().filter(t -> !nos.contains(t)).collect(Collectors.toList());
}