TreeMap получает исключение "fromKey > toKey" (fromKey больше, чем toKey?)
Я сохранил следующий атрибут XML в
HashMap<String, String> extraParams = new HashMap<String, String>()
<parameter name="sourceAttrStart" value="true" />
<parameter name="user" value="admin" />
<parameter name="password" value="password" />
<parameter name="SQL" value="SELECT * FROM test.users" />
<parameter name="driverClass" value="com.mysql.jdbc.Driver" />
<parameter name="url" value="jdbc:mysql://tesco-db.ce7gg2eo7hdc.us-
<parameter name="sourceAttrEnd" value="true" />
В основном я хочу получить подмножество hashmap между кетами sourceAttrStart
в sourceAttrEnd
Это то, что я пытаюсь
TreeMap<String, String> sorted = new TreeMap<String, String>(extraParams);
SortedMap<String, String> sourceParams = sorted.subMap("sourceAttrStart", "sourceAttrEnd");
Но получить ниже исключения, есть идеи, почему?
java.lang.IllegalArgumentException: fromKey > toKey
at java.util.TreeMap$NavigableSubMap.<init>(TreeMap.java:1368)
at java.util.TreeMap$AscendingSubMap.<init>(TreeMap.java:1855)
at java.util.TreeMap.subMap(TreeMap.java:913)
at java.util.TreeMap.subMap(TreeMap.java:954)
2 ответа
TreeMap
использует естественный порядок (compareTo()
метод) ключей для заказа элементов.
"sourceAttrEnd"
String
до "sourceAttrStart"
String
с точки зрения compareTo()
,
В то время как выброшенное исключение при вызове TreeMap.subMap("sourceAttrStart", "sourceAttrEnd")
:
java.lang.IllegalArgumentException: fromKey> toKey
Независимо от добавления элементов в HashMap
а затем с помощью HashMap
Объект для создания отсортированной коллекции не позволит сделать их упорядоченными по вашему желанию, так как HashMap
не гарантирует порядок элементов.
В качестве альтернативы, вы можете добавить элементы в LinkedHashMap
как только загрузка файла как LinkedHashMap
поддерживает порядок элементов в соответствии с порядком их вставки.
Но Properties
Класс не предназначен для поддержания порядка появления элементов. Для того, чтобы вы могли продлить Properties
,
Вот интересный пример.
Помимо способа использования, .properties
файлы также не предназначены для определенного порядка элементов.
Поэтому я думаю, что лучшей альтернативой будет использование Property
Класс и получить из него записи, которые вам нужны. Вы можете определить ключи записи в List
например.
Вот основной пример:
Properties props = ...; // load your file
List<String> keysToRetrieve = Arrays.asList("sourceAttrStart", "user", ..., "sourceAttrEnd");
Map<String, String> entriesToRetrieve = new HashMap<>();
for (String key : keysToRetrieve){
entriesToRetrieve.put(key, props.getProperty(key));
}
TreeMap
сортировать ключи в лексикографическом порядке. строка "sourceAttrEnd"
раньше "sourceAttrStart"
в таком порядке.