使用java流API检查列表元素是否是连续的整数范围

使用java流API检查列表元素是否是连续的整数范围,java,java-stream,Java,Java Stream,给定var ns=List.of(1,2,3,4) 如何使用java流API检查列表元素是否连续 可以使用以下循环完成此操作: 对于(var i=1;i有很多方法可以解决这个问题,我想创建一个有序列表,并将其与初始列表进行比较,例如: List<Integer> ints = IntStream.iterate(ns.get(0), i -> i + 1) .limit(ns.size()).boxed() .collect(Collectors

给定
var ns=List.of(1,2,3,4)
如何使用java流API检查列表元素是否连续

可以使用以下循环完成此操作:


对于(var i=1;i有很多方法可以解决这个问题,我想创建一个有序列表,并将其与初始列表进行比较,例如:

List<Integer> ints = IntStream.iterate(ns.get(0), i -> i + 1)
        .limit(ns.size()).boxed()
        .collect(Collectors.toList());
return ns.equals(ints);

有很多方法可以解决这个问题,我想创建一个有序列表,并将其与初始列表进行比较,例如:

List<Integer> ints = IntStream.iterate(ns.get(0), i -> i + 1)
        .limit(ns.size()).boxed()
        .collect(Collectors.toList());
return ns.equals(ints);

您可以将此问题视为映射列表中两个相邻元素之间的差异,如果任何差异不等于1,则这不是一个连续的列表

    final var ns = List.of(1, 2, 3, 4);
    IntStream.range(0, ns.size() - 1)
        .mapToLong(operand -> ns.get(operand + 1) - ns.get(operand))
        .anyMatch(value -> value != 1);

您可以将此问题视为映射列表中两个相邻元素之间的差异,如果任何差异不等于1,则这不是一个连续的列表

    final var ns = List.of(1, 2, 3, 4);
    IntStream.range(0, ns.size() - 1)
        .mapToLong(operand -> ns.get(operand + 1) - ns.get(operand))
        .anyMatch(value -> value != 1);

尽管您没有提到输入列表可以按升序或降序连续,但下面的代码可用于使用
收集器处理这两种情况。减少
(可能不如@YCF_L的解决方案那样优化)

AtomicInteger i=新的AtomicInteger(list.get(0));
函数f=a->(list.get(0)b-f.apply(i)))
.values()
.stream()
.allMatch(n->n==0);

尽管您没有提到输入列表可以按升序或降序连续,但下面的代码可用于使用
收集器处理这两种情况。减少
(可能不如@YCF\u L的解决方案那样优化)

AtomicInteger i=新的AtomicInteger(list.get(0));
函数f=a->(list.get(0)b-f.apply(i)))
.values()
.stream()
.allMatch(n->n==0);