• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Java-类库-Guava-Table

java 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

Table

  当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map

[code]Te<span style="color:transparent">本文来源gaodai#ma#com搞*!代#%^码$网!</span>st    public void TableTest(){        Table<String, Integer, String> aTable = HashBasedTable.create();          for (char a = 'A'; a <= 'C'; ++a) {              for (Integer b = 1; b <= 3; ++b) {                   aTable.put(Character.toString(a), b, String.format("%c%d", a, b));              }          }          System.out.println(aTable.column(2));          System.out.println(aTable.row("B"));           System.out.println(aTable.get("B", 2));          System.out.println(aTable.contains("D", 1));           System.out.println(aTable.containsColumn(3));           System.out.println(aTable.containsRow("C"));          System.out.println(aTable.columnMap());         System.out.println(aTable.rowMap());           System.out.println(aTable.remove("B", 3));     }
[code]{A=A2, B=B2, C=C2}{1=B1, 2=B2, 3=B3}B2falsetruetrue{1={A=A1, B=B1, C=C1}, 2={A=A2, B=B2, C=C2}, 3={A=A3, B=B3, C=C3}}{A={1=A1, 2=A2, 3=A3}, B={1=B1, 2=B2, 3=B3}, C={1=C1, 2=C2, 3=C3}}B3

 Table视图:

  rowMap()返回一个Map

[code]import com.google.common.collect.ClassToInstanceMap;import com.google.common.collect.HashBasedTable;import com.google.common.collect.MutableClassToInstanceMap;public class OtherTest {    @Test    public  void ClassToInstanceMapTest() {        ClassToInstanceMap<String> classToInstanceMapString =MutableClassToInstanceMap.create();        ClassToInstanceMap<Person> classToInstanceMap =MutableClassToInstanceMap.create();        Person person= new Person("peida",20);        System.out.println("person name :"+person.name+" age:"+person.age);        classToInstanceMapString.put(String.class, "peida");        System.out.println("string:"+classToInstanceMapString.getInstance(String.class));        classToInstanceMap.putInstance(Person.class,person);        Person person1=classToInstanceMap.getInstance(Person.class);        System.out.println("person1 name :"+person1.name+" age:"+person1.age);    }}class Person {    public String name;    public int age;    Person(String name, int age) {        this.name = name;        this.age = age;    }}

 RangeSet

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

[code]   @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);    }

 注意,像合并Range.closed(1, 10)和Range.closedOpen(11, 15)这样的情况,我们必须先用调用Range.canonical(DiscreteDomain)传入DiscreteDomain.integers()处理一下。

  RangeSet的视图

  RangeSet的实现支持了十分丰富的视图,包括:

  complement():是个辅助的RangeSet,它本身就是一个RangeSet,因为它包含了非连续,非空的range。

  subRangeSet(Range): 返回的是一个交集的视图。

  asRanges():返回可以被迭代的Set

[code]  @Test    public void RangeMapTest(){        RangeMap<Integer, String> rangeMap = TreeRangeMap.create();         rangeMap.put(Range.closed(1, 10), "foo");          System.out.println("rangeMap:"+rangeMap);         rangeMap.put(Range.open(3, 6), "bar");          System.out.println("rangeMap:"+rangeMap);         rangeMap.put(Range.open(10, 20), "foo");          System.out.println("rangeMap:"+rangeMap);         rangeMap.remove(Range.closed(5, 11));          System.out.println("rangeMap:"+rangeMap);    }    输出:    rangeMap:[[1‥10]=foo]    rangeMap:[[1‥3]=foo, (3‥6)=bar, [6‥10]=foo]    rangeMap:[[1‥3]=foo, (3‥6)=bar, [6‥10]=foo, (10‥20)=foo]    rangeMap:[[1‥3]=foo, (3‥5)=bar, (11‥20)=foo]

 RangeMap的视图

  RangeMap提供了两种视图:

  asMapOfRanges():返回Map

以上就是Java-类库-Guava-Table的内容,更多相关内容请关注搞代码(www.gaodaima.com)!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Java-类库-Guava-Table

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址