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

时间:2018-04-21 22:41:23

标签: java

我知道对于Integers,Java 8有IntStream,它允许你生成范围并检查它们,例如。

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

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

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

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

1 个答案:

答案 0 :(得分:4)

正如pkpnd在comment中所述,一个int与下一个4之间存在已知差异(例如5double相差一个整数)。但是,两个任意NavigableMap s之间有多远,一个ulp?

我必须模仿范围的一个建议是使用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

您可以自由地处理超出范围的值,但是您需要public static void main(String[] args) { Pizza pizza = new PizzaBakery(); //lets put Onion,Pepper and Salami into pizza: pizza = new Salami(new Pepper(new Onion(pizza)));}