Java 8 - 检查 Double 是否在范围内?

标签 java

我知道对于整数,Java 8 具有 IntStream,它允许您生成范围并检查它们,例如

IntStream range = IntStream.rangeClosed(5,10);
range.anyMatch(x -> x == 4);

我的问题是我有 Double 范围,定义为:

Light     [0, 3.0)
Moderate  [3.0, 6.0)
Vigorous  >= 6.0

根据这些范围检查的变量是一个double val。我只是想知道 Java 8 是否对此有任何方便的解决方案。出于各种原因,我不想使用复杂的 if/else 树。

最佳答案

如 pkpnd 在其 comment 中所述,一个 int 和下一个之间存在已知差异(例如 45 相隔一个整数)。然而,两个任意的 double,一个 ulp 相距多远?

我必须模拟 range 的一个建议是使用 NavigableMap:

enum Range {
    LIGHT, MODERATE, VIGOROUS, UNKNOWN
}

NavigableMap<Double, Range> map = new TreeMap<>();

map.put(Double.NEGATIVE_INFINITY, Range.UNKNOWN);
map.put(0D, Range.LIGHT);
map.put(3D, Range.MODERATE);
map.put(6D, Range.VIGOROUS);

System.out.println(map.floorEntry(4D).getValue());

输出:

MODERATE

您可以随心所欲地处理超出范围的值,以及 Double.NaN

关于Java 8 - 检查 Double 是否在范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49960809/

相关文章:

java - Android 颜色网格示例

java - 让我自己的 Java 异常(exception)

java - Hibernate 一对多映射

java - 构造函数中的对象参数

java - Android - findViewById() 与 findViewWithTag()

java - 异常错误

java - Resteasy UriBuilder 编码不正确?

java - 如何获取数组中最小值和最大值的索引返回?

java - 计算字符串中每个字符的个数

java - Maven:使用系统中的jar文件进行编译