I've stripped down the code to reproduce an example which throws the error:
public class Test {
public static void main(String[] args) {
NavigableSet<String> set = new TreeSet<String>(
Arrays.asList("a", "b", "c", "d"));
NavigableSet<String> set2 = new TreeSet<String>();
set2 = set.tailSet("c", false);
set2.addAll(set.headSet("b", true));
System.out.println(set2);
}
}
The aim of the code is to implement some sort of rollover when retrieving subsets of the set. E.g. in the case above, I want all elements from c [exclusive] to b [inclusive]. I noticed that if I comment out the tailSet() or headSet() lines, the rest of the code works well. However, when I have both lines, I get
java.lang.IllegalArgumentException: key out of range
Try something like this:
public static void main(String[] args) {
NavigableSet<String> set = new TreeSet<String>(
Arrays.asList("a", "b", "c", "d"));
NavigableSet<String> set2 = new TreeSet<String>();
set2.addAll(set.tailSet("c", false));
set2.addAll(set.headSet("b", true));
System.out.println(set2);
}
When you do
set2 = set.tailSet("c", false);
you actually lose the reference to the new TreeSet
that you created and get the SortedSet
that set.tailSet
returns.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With