Столяр неправильно заказывает?
У меня есть следующий код для запуска Joiner для объединения ключей. Однако они появляются не в порядке.
BiMap<String, String> whatever= HashBiMap.create();
{
whatever.put("First group", "f1");
whatever.put("This should really be second", "f2");
whatever.put("3rd group", "f3");
}
String groups = Joiner.on('|').join(whatever.keySet());
System.out.println(groups);
выход:
Это действительно должно быть второй |3-я группа | Первая группа
ожидаемый результат:
Первая группа | Это действительно должно быть второе |3-я группа
Как мне заставить их отображаться по порядку, потому что это важно, учитывая, что они будут оцениваться в логическом выражении?
2 ответа
HashBiMap.keySet
возвращает набор, который является неупорядоченной структурой данных. Таким образом, ваш вызов может быть в любом порядке.
По предложению Луи, поскольку вы используете библиотеку Guava, вы можете использовать доступные методы для сортировки коллекций, используя: Ordering.natural (). SortedCopy(Collection collection)
тогда последняя строка будет:
Collection<String> unsorted = whatever.values();
List<String> sorted = Ordering.natural().sortedCopy(unsorted)
String groups = Joiner.on('|').join(sorted);
System.out.println(groups);
Это будет сортировать только по алфавиту (я думаю).
Если неизменность является приемлемой, вы можете использовать ImmutableBiMap, который сохраняет порядок вставки. В противном случае я бы предложил создать метод, который бы сортировал данные самостоятельно (путем расширения BiMap или статического метода).
Вы создаете HashBiMap
который не сохраняет порядок. Вам нужен список для этого. Или если вы хотите в алфавитном порядке какой-то сортировать BiMap
,