如何在JOOL中创建一个Range

问题描述 投票:2回答:1

任何人都可以帮我一个如何在JOOL创建范围的例子&JOOL中的Range是什么意思?它的java doc说

范围是一个特殊的{@link Tuple2},有两倍相同的类型。

此外,Range有类似的方法

public boolean overlaps(Tuple2<T, T> other) {
    return Tuple2.overlaps(this, other);
}

public boolean overlaps(T t1, T t2) {
    return overlaps(new Range<>(t1, t2));
}

public Optional<Range<T>> intersect(Tuple2<T, T> other) {
    return Tuple2.intersect(this, other).map(Range::new);
}

public Optional<Range<T>> intersect(T t1, T t2) {
    return intersect(new Range<>(t1, t2));
}

请解释这些用例。谢谢!

java java-8 lambda-calculus jool-library
1个回答
1
投票

Range基本上就像数学范围,例如1..6是从1开始到6结束的范围。可以通过两种方式创建范围: -

  1. 通过从Jool Library调用带有Tuple2类型参数的构造函数

范围=新范围<>(Tuple.tuple(20,30));

要么

  1. 通过使用2个相同类型的值调用构造函数

范围=新范围<>(20,30);

现在,您可以对范围overlapintersection执行2个操作。

重叠意味着Range中至少有一个元素也存在于其他范围内。 overlaps方法返回true或false。见下面的例子: -

package jool.features.analysis.tuple;

import org.jooq.lambda.tuple.Range;
import org.jooq.lambda.tuple.Tuple;

public class RangeTest {

    public static void main(String[] args) {

        Range<Integer> range = new Range<>(20,30);
        Range<Integer> range2 = new Range<>(Tuple.tuple(20,30));

        System.out.println(range.overlaps(22,40)); // returns true as 22 falls between 20 & 30.

    }
}

类似地,交叉点表示从两个范围之间的交叉点出来的范围。见下面的例子: -

package jool.features.analysis.tuple;

import org.jooq.lambda.tuple.Range;
import org.jooq.lambda.tuple.Tuple;

public class RangeTest {

    public static void main(String[] args) {

        Range<Integer> range = new Range<>(20,30);
        Range<Integer> range2 = new Range<>(Tuple.tuple(20,30));

        System.out.println(range.intersection(22,40)); // returns Range(22,30) 

    }
}

在Range中,您可以传递相同类型的值或泛型类型的Tuple2,如下所示: -

Tuple2<T,T>,其中T是任何通用类型

即,元组中的值都应该是相同的类型,而元组的长度应该只是2。

我花了一段时间才明白这一切是如何运作的。但我仍然不理解使用Range适合的用例场景。

© www.soinside.com 2019 - 2024. All rights reserved.