Home guava example - RangeSet, RangeMap
Post
Cancel

guava example - RangeSet, RangeMap

view source

은근히 써먹을데가 있을 것 같다.

RangeSet으로 범위 계산을 간단하게 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  @Test
  public void openClosedTest() throws Exception {
    RangeSet<Integer> rangeSet = TreeRangeSet.create();

    // 0 <= x <= 2
    rangeSet.add(Range.closed(0, 2));
    System.out.println(rangeSet); // [[0..2]]

    assertTrue(rangeSet.contains(0));
    assertTrue(rangeSet.contains(1));
    assertTrue(rangeSet.contains(2));
    assertFalse(rangeSet.contains(3));

    // 13 < x 15
    rangeSet.add(Range.open(13, 15));
    System.out.println(rangeSet); // [[0..2], (3..5)]
    assertFalse(rangeSet.contains(12));
    assertFalse(rangeSet.contains(13));
    assertTrue(rangeSet.contains(14));
    assertFalse(rangeSet.contains(15));
    assertFalse(rangeSet.contains(16));

    // 23 < x <= 25
    rangeSet.add(Range.openClosed(23, 25));
    System.out.println(rangeSet); // [[0..2], (13..15), (23..25]]
    assertFalse(rangeSet.contains(22));
    assertFalse(rangeSet.contains(23));
    assertTrue(rangeSet.contains(24));
    assertTrue(rangeSet.contains(25));
    assertFalse(rangeSet.contains(26));

    // 33 <= x < 35
    rangeSet.add(Range.closedOpen(33, 35));
    System.out.println(rangeSet); // [[0..2], (13..15), (23..25], [33..35)]
    assertFalse(rangeSet.contains(32));
    assertTrue(rangeSet.contains(33));
    assertTrue(rangeSet.contains(34));
    assertFalse(rangeSet.contains(35));
    assertFalse(rangeSet.contains(36));
  }

complement로 rangeSet의 여집합을 구한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  @Test
  public void complementTest() throws Exception {
    RangeSet<Integer> rangeSet = TreeRangeSet.create();

    // 0 <= x < 2
    rangeSet.add(Range.closedOpen(0, 2));
    System.out.println(rangeSet); // [[0..2)]
    assertTrue(rangeSet.contains(0));
    assertTrue(rangeSet.contains(1));
    assertFalse(rangeSet.contains(2));

    // x < 0 , 2 <= x
    RangeSet<Integer> complementRangeSet = rangeSet.complement();
    System.out.println(complementRangeSet); // [(-∞..0), [2..+∞)]
    assertTrue(complementRangeSet.contains(-1));
    assertFalse(complementRangeSet.contains(0));
    assertFalse(complementRangeSet.contains(1));
    assertTrue(complementRangeSet.contains(2));
    assertTrue(complementRangeSet.contains(3));
  }

RangeMap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  @Test
  public void rangeMap() {
    RangeMap<Integer, String> rangeMap = TreeRangeMap.create();
    rangeMap.put(Range.atLeast(1000), "gold");
    rangeMap.put(Range.closedOpen(500, 1000), "silver");
    rangeMap.put(Range.open(0, 500), "bronze");
    rangeMap.put(Range.atMost(0), "none");
    System.out.println(rangeMap); // [(-∞..0]=none, (0..500)=bronze, [500..1000)=silver, [1000..+∞)=gold]

    assertEquals("none", rangeMap.get(-1));
    assertEquals("none", rangeMap.get(0));
    assertEquals("bronze", rangeMap.get(333));
    assertEquals("silver", rangeMap.get(500));
    assertEquals("gold", rangeMap.get(1000));
    assertEquals("gold", rangeMap.get(1500));
  }
This post is licensed under CC BY 4.0 by the author.