我有以下代码来运行Joiner到concat键。但是,它们出现故障。
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);
输出:
这应该是第二组|第三组|第一组
预期产出:
第一组|这应该是第二组|第三组
如何让它们按顺序显示,因为考虑到它们将以布尔表达式进行评估,这很重要?
答案 0 :(得分:4)
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或静态方法)。
答案 1 :(得分:0)
您正在创建一个不保留订单的HashBiMap
。你需要一个清单。或者,如果您希望按字母顺序排序某种排序BiMap
。