java - Joiner 没有正确订购?

标签 java guava joiner

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

相关文章:

java - 将相同的 auto_increment id 插入到两个不同的表中

java - 在jsp页面显示1000条记录

Java 7 - 字符串连接器和添加方法

java - com.google.common.base.Joiner.on() 出错

java - 是否有与 Apple 的 Core Data 等效的 Java?

java - Java .properties 文件中的日语文本

java - ExpireAfterWrite 似乎不起作用

java - 识别具有重复值的键值对

JAVA Guava /集合: How to use a predefined list as a predicate to sort another list by?

java - 是否可以使用 Java Guava 将连接器(收集器、累加器)应用于函数?