木匠没有正确订购?

时间:2014-01-22 22:27:07

标签: java guava joiner

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

输出:

  

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

预期产出:

  

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

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

2 个答案:

答案 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