Столяр неправильно заказывает?

У меня есть следующий код для запуска 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,

Другие вопросы по тегам