1

我有以下代码来运行 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);

输出:

这真的应该是第二组|第三组|第一组

预期输出:

第一组|这应该是第二组|第三组

我如何让这些按顺序显示,因为考虑到它们将以布尔表达式进行评估很重要?

4

2 回答 2

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 或静态方法)。

于 2014-01-22T22:43:01.457 回答
0

您正在创建一个HashBiMap不保留订单的产品。你需要一个清单。或者,如果您想要某种排序的字母顺序BiMap

于 2014-01-22T22:30:42.700 回答