Guava 소감: Range

7080 단어 GoogleGuava
Guava 에 새로운 유형의 Range 가 추 가 돼 이름 에서 알 수 있 듯 이 구간 과 관련 된 데이터 구조 다.Google 공식 문서 에서 정의 할 수 있 습 니 다. Range 는 연속 범위 경 계 를 정의 합 니 다. 이 연속 경 계 는 비교 할 수 있 는 유형 (Comparable type) 입 니 다.예 를 들 어 1 에서 100 사이 의 정형 데이터.
수학 에서 의 범 위 는 경계 와 무 경계 의 구분 이 있다.과 바 에서 도 마찬가지다.만약 이 범위 가 경계 가 있다 면 이 범 위 는 개집 (단점 포함 하지 않 음) 과 폐 집 (단점 포함) 으로 나 눌 수 있다.풀 리 지 않 는 것 이 라면 + 표시 할 수 있다.매 거 하면 모두 9 가지 범위 로 표시 된다.
콘 셉 트
표시 범위
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 rangeBase=Range.open(1, 4);
        Range rangeClose=Range.closed(2, 3);
        Range rangeCloseOpen=Range.closedOpen(2, 4);
        Range 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

    5. 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]
    
        :        ,       ,     

    6. 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

    좋은 웹페이지 즐겨찾기