以下是一个 Java 8 校验 List 中数字是否连续的工具类:
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class ListValidator {
public static boolean isConsecutive(List list) {
// 判断列表是否为空或只包含一个元素
if (list == null || list.isEmpty() || list.size() == 1) {
return true;
}
// 对列表进行排序
List sortedList = list.stream().sorted().collect(Collectors.toList());
// 使用IntStream创建一段连续的整数序列
IntStream range = IntStream.range(sortedList.get(0), sortedList.get(sortedList.size() - 1) + 1);
// 将排序后的列表中的元素与生成的连续整数序列逐个比较
return range.allMatch(sortedList::contains);
}
}
上述代码实现了一个名为ListValidator
的工具类,其中的isConsecutive
方法用于校验传入的列表中的数字是否连续。该方法的实现过程如下:
首先,判断传入的列表是否为空或只包含一个元素,如果是,则直接返回true
。因为一个空列表或只有一个元素的列表,其内部的数字一定是连续的。
然后,对列表进行排序,这样可以减少后续的比较操作次数。使用Java 8的流式API中的sorted()
方法可以方便地对列表进行排序。
接着,使用IntStream.range()
方法创建一个包含指定范围内连续整数的序列。其中,sortedList.get(0)
和sortedList.get(sortedList.size() - 1)
分别表示列表中最小值和最大值。
最后,使用allMatch()
方法将排序后的列表中的元素与生成的连续整数序列逐个比较,如果全部匹配,则说明列表中的数字是连续的。
使用该工具类的示例:
List yourList = ... // 待校验的列表
if (ListValidator.isConsecutive(yourList)) {
System.out.println("列表中的数字是连续的");
} else {
System.out.println("列表中的数字不连续");
}
需要注意的是,在实际应用中,还需要根据业务需求进行异常处理等操作,以确保程序的正确性和健壮性。
以下是一个测试用例,用于验证上述 Java 8 校验 List 中数字是否连续的工具类实现的正确性:
import java.util.Arrays;
import java.util.List;
public class ListValidatorTest {
public static void main(String[] args) {
List list1 = Arrays.asList(1, 2, 3, 4, 5);
List list2 = Arrays.asList(1, 3, 4, 5, 6);
List list3 = Arrays.asList(1, 2, 4, 5, 6);
List list4 = Arrays.asList(1, 2, 3, 5, 6);
List list5 = Arrays.asList(1);
List list6 = null;
System.out.println(ListValidator.isConsecutive(list1)); // true
System.out.println(ListValidator.isConsecutive(list2)); // false
System.out.println(ListValidator.isConsecutive(list3)); // false
System.out.println(ListValidator.isConsecutive(list4)); // false
System.out.println(ListValidator.isConsecutive(list5)); // true
System.out.println(ListValidator.isConsecutive(list6)); // true
}
}
修改工具类的入参为 List
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class ListValidator {
public static boolean isConsecutive(List list) {
// 判断列表是否为空或只包含一个元素
if (list == null || list.isEmpty() || list.size() == 1) {
return true;
}
// 将字符串列表转换为整数列表
List intList = list.stream().map(Integer::parseInt).collect(Collectors.toList());
// 对整数列表进行排序
List sortedList = intList.stream().sorted().collect(Collectors.toList());
// 使用IntStream创建一段连续的整数序列
IntStream range = IntStream.range(sortedList.get(0), sortedList.get(sortedList.size() - 1) + 1);
// 将排序后的列表中的元素与生成的连续整数序列逐个比较
return range.allMatch(sortedList::contains);
}
}
上述代码与之前的示例基本相同,只是将入参类型由List
改为了List
。在方法实现中,首先通过map()
方法将字符串列表转换为整数列表,然后再对整数列表进行排序和比较操作。
使用该工具类的示例如下:
List yourList = ... // 待校验的字符串列表
if (ListValidator.isConsecutive(yourList)) {
System.out.println("列表中的数字是连续的");
} else {
System.out.println("列表中的数字不连续");
}
以下是一个测试用例,用于验证上述 Java 8 校验 List 中字符串是否连续的工具类实现的正确性:
import java.util.Arrays;
import java.util.List;
public class ListValidatorTest {
public static void main(String[] args) {
List list1 = Arrays.asList("1", "2", "3", "4", "5");
List list2 = Arrays.asList("1", "3", "4", "5", "6");
List list3 = Arrays.asList("1", "2", "4", "5", "6");
List list4 = Arrays.asList("1", "2", "3", "5", "6");
List list5 = Arrays.asList("1");
List list6 = null;
System.out.println(ListValidator.isConsecutive(list1)); // true
System.out.println(ListValidator.isConsecutive(list2)); // false
System.out.println(ListValidator.isConsecutive(list3)); // false
System.out.println(ListValidator.isConsecutive(list4)); // false
System.out.println(ListValidator.isConsecutive(list5)); // true
System.out.println(ListValidator.isConsecutive(list6)); // true
}
}
在上述代码中,定义了6个列表,分别对应了不同的情况。通过调用ListValidator.isConsecutive()
方法对这些列表进行校验,并打印校验结果,以验证工具类的正确性。
需要注意的是,在实际应用中,还需要针对不同的业务需求编写不同的测试用例,以确保程序的正确性和健壮性。