2017-07-12 5 views
1

GuavaのImmutableRangeSetは、重複範囲を格納できません。これは理にかなっていますが、オーバーラップする範囲を解決/マージし、結果の範囲をImmutableRangeSetに入れるインターフェイスがありますか?オーバーラップ範囲からGuava ImmutableRangeSetを作成

現在、私はTreeRangeSetを作成しています。これは自動的に重複する範囲をマージし、これを引数としてImmutableRangeSet.builder().addAll()に渡します。このプロセスは機能しますが、オーバーラップする範囲を解決するのは間接的すぎるようです。

答えて

3

具体的なユースケースについて教えてください。 I 推測あなたは範囲のコレクションを持っており、範囲が重複する場合はIAEをスローするcopyOfメソッドを使用してImmutableRangeSetを作成しようとしています。この場合

java.lang.IllegalArgumentException: 
Overlapping ranges not permitted but found [0..2] overlapping [1..4] 

で失敗した

@Test 
public void shouldHandleOverlappingRanges() 
{ 
    //given 
    ImmutableList<Range<Integer>> ranges = ImmutableList.of(
      Range.closed(0, 2), 
      Range.closed(1, 4), 
      Range.closed(9, 10) 
    ); 
    //when 
    ImmutableRangeSet<Integer> rangeSet = ImmutableRangeSet.copyOf(ranges); 
    //then 
    assertThat(rangeSet.asSet(DiscreteDomain.integers())) 
      .containsOnly(0, 1, 2, 3, 4, 9, 10); 
} 

あなたの代わりにcopyOfunionOfを使用する必要があり、それが渡したい::さんは、このテストケースを見てみましょう

//when 
ImmutableRangeSet<Integer> rangeSet = ImmutableRangeSet.unionOf(ranges); 
+0

パーフェクト! 'unionOf'はまさに私が探していたものです。ありがとうございました! – user12341234

関連する問題