我有以下代码来运行 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);
输出:
This should really be second|3rd group|First group
预期输出:
First group|This should really be second|3rd group
我如何让它们按顺序显示,因为考虑到它们将在 boolean 表达式中进行评估很重要?
最佳答案
HashBiMap.keySet
返回一个无序数据结构的集合。因此,您的加入通话可以按任何顺序进行。
正如 Louis 所建议的,当您使用 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 或静态方法)。
关于java - Joiner 没有正确订购?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21295344/