我知道对于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
树。
答案 0 :(得分:4)
正如pkpnd在comment中所述,一个int
与下一个4
之间存在已知差异(例如5
和double
相差一个整数)。但是,两个任意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)));}
。