使用
TreeSet.ceiling()查找“组”边界值.
例
TreeSet groups = new TreeSet<>();
groups.add( 5d); // [-Inf, 5]
groups.add(10d); // ] 5, 10]
groups.add(15d); // ] 10, 15]
groups.add(20d); // ] 15, 20]
groups.add(25d); // ] 20, 25]
groups.add(30d); // ] 25, 30]
groups.add(Double.POSITIVE_INFINITY); // ] 30, +Inf]
Random rnd = new Random();
for (double value = 0d; value <= 30d; value += 5d) {
double down = Math.nextDown(value);
double up = Math.nextUp(value);
System.out.printf("%-18s -> %4s %-4s -> %4s %-18s -> %4s%n",
down, groups.ceiling(down),
value, groups.ceiling(value),
up, groups.ceiling(up));
}
for (int i = 0; i < 10; i++) {
double value = rnd.nextDouble() * 30d;
double group = groups.ceiling(value);
System.out.printf("%-18s -> %4s%n", value, group);
}
产量
-4.9E-324 -> 5.0 0.0 -> 5.0 4.9E-324 -> 5.0
4.999999999999999 -> 5.0 5.0 -> 5.0 5.000000000000001 -> 10.0
9.999999999999998 -> 10.0 10.0 -> 10.0 10.000000000000002 -> 15.0
14.999999999999998 -> 15.0 15.0 -> 15.0 15.000000000000002 -> 20.0
19.999999999999996 -> 20.0 20.0 -> 20.0 20.000000000000004 -> 25.0
24.999999999999996 -> 25.0 25.0 -> 25.0 25.000000000000004 -> 30.0
29.999999999999996 -> 30.0 30.0 -> 30.0 30.000000000000004 -> Infinity
3.7159199611763514 -> 5.0
7.685306184937567 -> 10.0
2.6949924484301633 -> 5.0
17.594251973883363 -> 20.0
24.005899441664994 -> 25.0
7.720531186142164 -> 10.0
22.82402791692674 -> 25.0
22.68288732263466 -> 25.0
13.056624829892243 -> 15.0
8.504511505971251 -> 10.0