Guava 학습 노트: Range

9815 단어
Guava 에 새로운 유형의 Range 가 추 가 돼 이름 에서 알 수 있 듯 이 구간 과 관련 된 데이터 구조 다.Google 공식 문서 에서 정의 할 수 있 습 니 다. Range 는 연속 범위 경 계 를 정의 합 니 다. 이 연속 경 계 는 비교 할 수 있 는 유형 (Comparable type) 입 니 다.예 를 들 어 1 에서 100 사이 의 정형 데이터.
수학 에서 의 범 위 는 경계 와 무 경계 의 구분 이 있다.과 바 에서 도 마찬가지다.만약 이 범위 가 경계 가 있다 면 이 범 위 는 개집 (단점 포함 하지 않 음) 과 폐 집 (단점 포함) 으로 나 눌 수 있다.풀 리 지 않 는 것 이 라면 + 표시 할 수 있다.매 거 하면 모두 9 가지 범위 로 표시 된다.
Guava Range 개념, 범위 와 방법
콘 셉 트
표시 범위
guava 대응 기능 방법
(a..b)
{x | a < x < b}
open(C, C)
[a..b]
{x | a <= x <= b} 
closed(C, C)
[a..b)
{x | a <= x < b}
closedOpen(C, C)
(a..b]
{x | a < x <= b}
openClosed(C, C)
(a..+∞)
{x | x > a}
greaterThan(C)
[a..+∞)
{x | x >= a}
atLeast(C)
(-∞..b)
{x | x < b}
lessThan(C)
(-∞..b]
{x | x <= b}
atMost(C)
(-∞..+∞)
all values
all()
위 표 의 guava 대응 기능 방법 란 은 Range 류 가 제공 하 는 방법 을 나타 내 며 각각 9 가지 발생 가능 한 범위 구간 을 나타 낸다. 구간 양쪽 에 범위 가 존재 한다 면 구간 오른쪽 수 는 구간 왼쪽 수 보다 작 을 수 없다. 극단 적 인 상황 에서 구간 양쪽 의 수 는 같 지만 전제 조건 은 최소 한 개의 경계 가 닫 혀 있다 는 것 이다.그렇지 않 으 면 성립 되 지 않 습 니 다. 예 를 들 어 [a. a]: 안에 하나의 수 a 만 있 습 니 다. [a. a); (a. a]: 빈 구간 범위 이지 만 유효 합 니 다. (a. a): 이 경 우 는 무효 입 니 다. 이러한 Range 를 구성 하면 이상 이 발생 합 니 다. Range 를 사용 할 때 주의 하 셔 야 합 니 다. 구조 구간 에 서 는 변경 할 수 없 는 유형 을 사용 하 십시오. 가 변 적 인 유형 을 사용 해 야 한다 면 구간 유형 구조 가 완 료 된 경우 구간 양쪽 의 수 를 바 꾸 지 마 십시오.
 실례:
public class TestBaseRange {
@Test
public void testRange(){ System.out.println("open:"+Range.open(1, 10)); System.out.println("closed:"+ Range.closed(1, 10)); System.out.println("closedOpen:"+ Range.closedOpen(1, 10)); System.out.println("openClosed:"+ Range.openClosed(1, 10)); System.out.println("greaterThan:"+ Range.greaterThan(10)); System.out.println("atLeast:"+ Range.atLeast(10)); System.out.println("lessThan:"+ Range.lessThan(10)); System.out.println("atMost:"+ Range.atMost(10)); System.out.println("all:"+ Range.all()); System.out.println("closed:"+Range.closed(10, 10)); System.out.println("closedOpen:"+Range.closedOpen(10, 10)); // System.out.println("open:"+Range.open(10, 10)); } }

그 밖 에 범 위 는 바 인 딩 형식 을 통 해 인 스 턴 스 를 구성 할 수 있 습 니 다. 예 를 들 어:
public class TestBaseRange {

    @Test
    public void testRange(){
        System.out.println("downTo:"+Range.downTo(4, BoundType.OPEN));
        System.out.println("upTo:"+Range.upTo(4, BoundType.CLOSED));
        System.out.println("range:"+Range.range(1, BoundType.CLOSED, 4, BoundType.OPEN)); 
    }
}

출력:
downTo:(4‥+∞)
upTo:(-∞‥4]
range:[1‥4)

조작 방법
1. contains: 현재 Range 에 있 는 지 여 부 를 판단 합 니 다.
    @Test
    public void testContains(){
        System.out.println(Range.closed(1, 3).contains(2)); 
        System.out.println(Range.closed(1, 3).contains(4)); 
        System.out.println(Range.lessThan(5).contains(5)); 
        System.out.println(Range.closed(1, 4).containsAll(Ints.asList(1, 2, 3))); 
    }

  //=====  =====
  true
  false
  false
  true

2. Endpoint 관련 조회 방법:
    @Test
    public void testQuery(){
        System.out.println("hasLowerBound:"+Range.closedOpen(4, 4).hasLowerBound()); 
        System.out.println("hasUpperBound:"+Range.closedOpen(4, 4).hasUpperBound()); 
        System.out.println(Range.closedOpen(4, 4).isEmpty()); 
        System.out.println(Range.openClosed(4, 4).isEmpty()); 
        System.out.println(Range.closed(4, 4).isEmpty()); 
        // Range.open throws IllegalArgumentException
        //System.out.println(Range.open(4, 4).isEmpty()); 

        System.out.println(Range.closed(3, 10).lowerEndpoint());
        System.out.println(Range.open(3, 10).lowerEndpoint()); 
        System.out.println(Range.closed(3, 10).upperEndpoint()); 
        System.out.println(Range.open(3, 10).upperEndpoint()); 
        System.out.println(Range.closed(3, 10).lowerBoundType()); 
        System.out.println(Range.open(3, 10).upperBoundType()); 
    }

  //======  =======
  hasLowerBound:true
  hasUpperBound:true
  true
  true
  false
  3
  3
  10
  10
  CLOSED
  OPEN

 3. encloses 방법: encloses (Range range) 의 range 가 비교 해 야 할 range 에 포함 되 어 있 는 지 여부
    @Test
    public void testEncloses(){
        Range<Integer> rangeBase=Range.open(1, 4);
        Range<Integer> rangeClose=Range.closed(2, 3);
        Range<Integer> rangeCloseOpen=Range.closedOpen(2, 4);
        Range<Integer> rangeCloseOther=Range.closedOpen(2, 5);
        System.out.println("rangeBase: "+rangeBase+" Enclose:"+rangeBase.encloses(rangeClose)+" rangeClose:"+rangeClose);
        System.out.println("rangeBase: "+rangeBase+" Enclose:"+rangeBase.encloses(rangeCloseOpen)+" rangeClose:"+rangeCloseOpen);
        System.out.println("rangeBase: "+rangeBase+" Enclose:"+rangeBase.encloses(rangeCloseOther)+" rangeClose:"+rangeCloseOther);
    }

  //=======  ========
  rangeBase: (1‥4) Enclose:true rangeClose:[2‥3]
  rangeBase: (1‥4) Enclose:true rangeClose:[2‥4)
  rangeBase: (1‥4) Enclose:false rangeClose:[2‥5)

4. isConnected: range 연결 가능 여부
    @Test
    public void testConnected(){
        System.out.println(Range.closed(3, 5).isConnected(Range.open(5, 10))); 
        System.out.println(Range.closed(0, 9).isConnected(Range.closed(3, 4)));
        System.out.println(Range.closed(0, 5).isConnected(Range.closed(3, 9))); 
        System.out.println(Range.open(3, 5).isConnected(Range.open(5, 10))); 
        System.out.println(Range.closed(1, 5).isConnected(Range.closed(6, 10)));
    }

  //======  =========
  true
  true
  true
  false
  false

4. intersection: 두 range 가 연결 되 어 있 을 때 최대 교 집합 으로 돌아 가 연결 되 지 않 으 면 이상 을 던 집 니 다.
    @Test
    public void testIntersection(){
        System.out.println(Range.closed(3, 5).intersection(Range.open(5, 10))); 
        System.out.println(Range.closed(0, 9).intersection(Range.closed(3, 4))); 
        System.out.println(Range.closed(0, 5).intersection(Range.closed(3, 9))); 
        System.out.println(Range.open(3, 5).intersection(Range.open(5, 10)));
        System.out.println(Range.closed(1, 5).intersection(Range.closed(6, 10)));
    }

  //=======  =========
  (5‥5]
  [3‥4]
  [3‥5]

    :        ,       ,     

 5. span: 두 range 의 집합 을 가 져 옵 니 다. 두 range 가 두 연 결 된 경우 최소 range 입 니 다.
 
    @Test
    public void testSpan(){
        System.out.println(Range.closed(3, 5).span(Range.open(5, 10))); 
        System.out.println(Range.closed(0, 9).span(Range.closed(3, 4))); 
        System.out.println(Range.closed(0, 5).span(Range.closed(3, 9))); 
        System.out.println(Range.open(3, 5).span(Range.open(5, 10))); 
        System.out.println(Range.closed(1, 5).span(Range.closed(6, 10)));
        System.out.println(Range.closed(1, 5).span(Range.closed(7, 10)));
    }

  //=====  =======
  true
  true
  true
  false
  false

 

좋은 웹페이지 즐겨찾기