文档章节

Guava新集合-RangeSet

Kevin-air
 Kevin-air
发布于 2016/08/05 14:34
字数 389
阅读 149
收藏 0

RangeSet用来处理一系列不连续,非空的range。当添加一个range到一个RangeSet之后,任何有连续的range将被自动合并,而空的range将被自动去除

示例

import com.google.common.collect.Range;
import com.google.common.collect.RangeSet;
import com.google.common.collect.TreeRangeSet;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.junit.Test;

import java.util.Set;

/**
 * @author Kevin
 * @description
 * @date 2016/8/5
 */
public class RangeSetTest {

    @Test
    public void rangeSetTest() {
        RangeSet<Integer> rangeSet = TreeRangeSet.create();

        rangeSet.add(Range.closed(1, 10));
        System.out.println("rangeSet:" + rangeSet);

        rangeSet.add(Range.closedOpen(11, 15));
        System.out.println("rangeSet:" + rangeSet);

        rangeSet.add(Range.open(15, 20));
        System.out.println("rangeSet:" + rangeSet);

        rangeSet.add(Range.openClosed(0, 0));
        System.out.println("rangeSet:" + rangeSet);

        rangeSet.remove(Range.open(5, 10));
        System.out.println("rangeSet:" + rangeSet);

        RangeSet<Integer> complement = rangeSet.complement();
        // [(-∞‥1), (5‥10), (10‥11), [15‥15], [20‥+∞)]
        System.out.println(complement);

        // rangeSet与一个range的交集
        RangeSet<Integer> subRangeSet = rangeSet.subRangeSet(Range.closed(15, 30));
        // subRangeSet:[(15‥20)]
        System.out.println("subRangeSet:" + subRangeSet);

        Set<Range<Integer>> set = rangeSet.asRanges();
        // set:[[1‥5], [10‥10], [11‥15), (15‥20)]
        System.out.println("set:" + set);

        // true
        System.out.println("contains:" + rangeSet.contains(10));

        // rangeContaining:[10‥10]
        System.out.println("rangeContaining:" + rangeSet.rangeContaining(10));

        // true
        System.out.println("encloses:" + rangeSet.encloses(Range.closed(1, 5)));

        // span:[1‥20)
        System.out.println("span:" + rangeSet.span());
    }
}

RangeSet的视图
  RangeSet的实现支持了十分丰富的视图,包括:
  complement():是个辅助的RangeSet,它本身就是一个RangeSet,因为它包含了非连续,非空的range。
  subRangeSet(Range<C>): 返回的是一个交集的视图。
  asRanges():返回可以被迭代的Set<Range<C>>的视图。
Queries
  除了支持各种视图,RangeSet还支持各种直接的查询操作,其中最重要的是:
  contains(C):这是RangeSet最基本的操作,它能查询给定的元素是否在RangeSet里。
  rangeContaining(C): 返回包含给定的元素的Range,如果不存在就返回null。
  encloses(Range<C>): 用来判断给定的Range是否包含在RangeSet里面。
  span():返回一个包含在这个RangeSet的所有Range的并集。

© 著作权归作者所有

共有 人打赏支持
Kevin-air
粉丝 13
博文 73
码字总数 26587
作品 0
深圳
私信 提问
Guava学习笔记:Guava新集合-Table等

  Table   当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的 Map<FirstName, Map<LastName, Person>>来实现。为此Guava提供了一个新的集合类型-Table集合类型,来...

pior
2015/04/01
0
0
Guava一些高效类的使用实践

guava是google的一个强大的工具包,目前已经更新到版本22 https://github.com/google/guava,一直有断断续续的用过一些方法,但是没有系统的撸一遍所有功能 今天参考并发编程网记录一些高效的...

zimingforever
2017/06/15
0
0
guava集合下四 -新的集合类型

guava中产生了jdk中没有的新集合,而且是广泛使用的,这些都能和jdk中集合框架共存,没有将这些硬结合到jdk的抽象集合。 通常,guava集合实现了jdk的接口,紧密的结合到了一起 Multiset 和传...

writeademo
11/28
0
0
Guava新集合-RangeMap

RangeMap   RangeMap代表了非连续非空的range对应的集合。不像RangeSet,RangeMap不会合并相邻的映射,甚至相邻的range对应的是相同的值。 示例 RangeMap的视图   RangeMap提供了两种视图...

Kevin-air
2016/08/05
15
0
Google Guava 笔记

一、引言 Guava 是 google 几个java核心类库的集合,包括集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common ...

qllinhongyu
2014/09/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
1
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
4
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
4
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
17
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部