2014-07-22 6 views
1

한 유형의 주어진 Guava Range을 다른 유형의 범위로 변환하려면 어떻게해야합니까?구아바 범위를 다른 유형으로 변환

필자는 Predicates.compose와 비슷한 작성 방법을 기대합니다. 예를 들어 정수와 긴을 가지고 : 단위 테스트와

public static <F extends Comparable<F>, T extends Comparable<T>> Range<T> compose(Range<F> range, 
     Function<F, T> function) { 
    Range<T> result; 
    if (range.hasUpperBound() && range.hasLowerBound()) { 
     T upperEndpoint = function.apply(range.upperEndpoint()); 
     T lowerEndpoint = function.apply(range.lowerEndpoint()); 
     result = Range.range(lowerEndpoint, range.lowerBoundType(), upperEndpoint, range.upperBoundType()); 
    } else if (range.hasUpperBound()) { 
     result = Range.upTo(function.apply(range.upperEndpoint()), range.upperBoundType()); 
    } else if (range.hasLowerBound()) { 
     result = Range.downTo(function.apply(range.lowerEndpoint()), range.lowerBoundType()); 
    } else { 
     result = Range.all(); 
    } 
    return result; 
} 

:

@Test 
public void testLongRangeToInteger() { 
    Integer inRange = 6; 
    Integer outOfRange = 3; 
    Range<Long> longRange = Range.atLeast(5l); 
    assertTrue(longRange.apply(inRange.longValue())); 
    assertFalse(longRange.apply(outOfRange.longValue())); 

    Function<Long, Integer> function = integerFromLongFunction(); 
    Range<Integer> intRange = RangeExtended.compose(longRange, function); 
    assertTrue(intRange.apply(inRange)); 
    assertFalse(intRange.apply(outOfRange)); 
} 

public static Function<Long, Integer> integerFromLongFunction() { 
    return new Function<Long, Integer>() { 

     @Override 
     public Integer apply(Long input) { 
      return (input == null) ? null : input.intValue(); 
     } 
    }; 
} 

내 현재의 욕망에 Joda 시간을 변환 실제로

Range<Integer> intRange = Range.compose(Range.atLeast(10l),integerFromLongFunction); 

은 내가 작성 방법을 썼다 그것은 밀리에 해당하는 것이지만, 단순화를 위해 Long/Integer에 예제를 썼습니다.

구아바가 가지고있는 것 같지만 아무데도 찾을 수 없습니다. 나는 v14를 사용하고 있지만 최신 v17 javadoc을 살펴보면 아무 것도 공개하지 않았다.

답변

0

나는 이것이 당신이

public static final Function<Range<Duration>, Range<Long>> DURATION_RANGE_TO_LONG_RANGE = new Function<Range<Duration>, Range<Long>>() { 

    @Override 
    public Range<Long> apply(final Range<Duration> input) { 

     return Range.range(input.lowerEndpoint() 
       .getMillis(), input.lowerBoundType(), input.upperEndpoint() 
       .getMillis(), input.upperBoundType()); 
    } 

}; 

public static final void main(final String... args) { 
    final List<Range<Duration>> durationRanges = ImmutableList.of(
      Range.closedOpen(Duration.millis(100), Duration.millis(200)), 
      Range.closedOpen(Duration.millis(200), Duration.millis(300))); 

    final List<Range<Long>> longRanges = FluentIterable.from(durationRanges) 
     .transform(DURATION_RANGE_TO_LONG_RANGE) 
     .toList(); 

    //[[100‥200), [200‥300)] 
    System.out.println(longRanges); 
} 
찾고있는 것을 생각