java - Firestore Document 不维护 LinkedHashMap 中键的顺序

标签 java android google-cloud-firestore

我有一个对列表,我将其插入 LinkedHashMap 并将其上传到 Firestore 文档。但是,Firestore 文档中的键顺序与 LinkedHashMap 中的键顺序不匹配。

代码如下:

    Map<String, String> quesMap = new LinkedHashMap<>();
    for(Pair<String, String> pair : quesAnsPairList){
        Log.d(TAG, "adding key : "  + pair.first);
        quesMap.put(pair.first, pair.second);
    }
    for (Map.Entry<String, String> entry : quesMap.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();
        Log.d(TAG, key + " found");
    }
    //....
    visitorsCollectionRef.document(visitor_id).set(quesMap);

最佳答案

不幸的是,您无法更改文档的顺序。我发现您在订购时使用了Strings。请注意,当字符串排序时,是按字典顺序排序的。

让我们举一个简单的例子。对于数字,这是正常顺序:

  • 1308
  • 1309
  • 1310
  • 1311

但对于字符串,这是正常顺序:

  • “1308”
  • “1309”
  • “131”
  • “1310”

据我所知,Cloud Firestore 中以及大多数其他数据库中都没有允许您更改此行为的操作符。相反,您必须修改数据才能获得您想要的行为。因此,按字典顺序排序时,请按照您需要的顺序存储值。对于数字,您可以通过用零填充来实现:

  • "0131"//前面加零
  • "0132"//前面加零
  • ......
  • “1308”
  • “1309”
  • “1310”
  • “1311”

关于java - Firestore Document 不维护 LinkedHashMap 中键的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49411918/

相关文章:

java - 在 Tomcat 7 中部署 Spring MVC + Maven

java - 如何对indexedEmbedded中的字段进行排序

Java使用递归将输入更改为大写

firebase - Flutter:如何在firebase中删除特定的数组数据

java - 什么时候使用 super() ?

android - Eclipse 找不到 Android 设备 - Motorola RAZR HD

android - 如何按包名自动安装 Play 商店应用程序?

android - 通过 OpenNFC 进行卡模拟

firebase - 如何使用flutter在Firestore中存储多个URL

android - Flutter Firestore使用setDate批量写入并合并