java 动态分组map_使用java 8按任意间隔对Map进行分组

使用

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值