java修改按钮的间隔_在java中设置的间隔

本文介绍了一种用于合并重叠区间的算法实现。通过自定义包装Guava的Range类以支持区间比较,并利用该类实现区间列表的排序和合并,最终得到一个不包含重叠区间的合并后区间列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个带整数值的区间列表[例如. [1,4],[10,19]等].有没有办法将这些间隔放入一些

java集合的容器中[例如.设置]这样我就可以在容器上调用’union’函数. ‘union’函数应该给我一个间隔列表,这样如果任何2个插入的间隔重叠,那么它们应该在输出中合并.

我尝试在Guava中使用Range类,但最终在合并之前将所有间隔相互比较.一个优雅的方法将非常感谢!以下是我根据以下回答尝试的内容.输出为[[1,15],[17,20]],这是正确的.我想知道是否有一些现有的API实现了这样的东西.

public static void main(String[] args) {

// mock data

List rng_lst = new ArrayList();

rng_lst.add(new MyIntRange(1, 10));

rng_lst.add(new MyIntRange(5, 15));

rng_lst.add(new MyIntRange(17, 20));

// sort intervals by start position

Collections.sort(rng_lst);

// merge the intervals which overlap

List res_lst = new ArrayList();

MyIntRange old_rng = null;

for (MyIntRange cur_rng : rng_lst) {

if (old_rng == null) {

old_rng = cur_rng;

} else {

if (old_rng.rng.upperEndpoint() < cur_rng.rng.lowerEndpoint()) {

// this does not over lap with the next one

res_lst.add(old_rng);

old_rng = cur_rng;

} else {

// overlap

old_rng = new MyIntRange(old_rng.rng.lowerEndpoint(),

cur_rng.rng.upperEndpoint());

}

}

}

// add the last range

res_lst.add(old_rng);

// done!

System.out.println(res_lst);

}

// wrapper around Guava's Range to make it comparable based on the

// interval's start

public static class MyIntRange implements Comparable {

Range rng;

public MyIntRange(int start, int end) {

rng = Ranges.closed(start, end);

}

public int compareTo(MyIntRange that) {

int res = -1;

if (this.rng.lowerEndpoint() > that.rng.lowerEndpoint()) {

res = 1;

}

return res;

}

public String toString() {

return "[" + rng.lowerEndpoint() + ", " + rng.upperEndpoint() + "]";

}

}

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值