java - 如何在列表中计算相似id对象并在recyclerview中显示?

标签 java android json

我有一个 JSON 数组,因为我需要使用 ParentCommentID 进行匹配计数,并使用 TextView 将数据解析到 recyclerview 中,同时计数我只得到一个位置的数字计数,其他项目也相同,任何帮助。

{
  "d": {
    "results": [
      {
        "__metadata": {
          "id": "e7433825-6771-4f5e-96c7-c4d2674d7764",
          "uri": "",
          "etag": "\"2\"",
          "type": "SP.Data.InquiryDiscussionsListListItem"
        },
        "Author": {
          "__metadata": {
            "id": "f064775c-6161-4bdb-9f4d-8bc6a898d218",
            "type": "SP.Data.UserInfoItem"
          },
          "Title": "Submitter1"
        },
        "Id": 1501,
        "ID": 1501,
        "Title": null,
        "Created": "2019-06-06T04:15:17Z",
        "ParentCommentID": "1439",
        "Comment": "<div class=\"ExternalClass8C333A77B6564A53BED74CA1BA2D2A10\">
        reply add for 009</div>",
        "CommentType": null,
        "CommentDocumentName": null,
        "AppID": "1083",
        "Role": "Customer"
      },
      {
        "__metadata": {
          "id": "e92f708f-93dc-4587-8c4f-5518ed24f360",
          "uri": "",
          "etag": "\"2\"",
          "type": "SP.Data.InquiryDiscussionsListListItem"
        },
        "Author": {
          "__metadata": {
            "id": "209d2d9a-bb07-4064-aaa0-231ad881a80f",
            "type": "SP.Data.UserInfoItem"
          },
          "Title": "Submitter1"
        },
        "Id": 1500,
        "ID": 1500,
        "Title": null,
        "Created": "2019-06-06T04:14:55Z",
        "ParentCommentID": "1439",
        "Comment": "<div class=\"ExternalClass44B1A0BB4D314C57BEE20141BFF10491\">comment add for       009</div>",
        "CommentType": null,
        "CommentDocumentName": null,
        "AppID": "1083",
        "Role": "Customer"
      },
      {
        "__metadata": {
          "id": "ec112002-3132-4bc1-8f85-03fbd9fda11d",
          "uri": "",
          "etag": "\"2\"",
          "type": "SP.Data.InquiryDiscussionsListListItem"
        },
        "Author": {
          "__metadata": {
            "id": "6e8ecb1d-4deb-4168-a8b4-a725abf8002a",
            "type": "SP.Data.UserInfoItem"
          },
          "Title": "Sarada Devi Potti"
        },
        "Id": 1439,
        "ID": 1439,
        "Title": "Canceled",
        "Created": "2019-06-03T09:32:34Z",
        "ParentCommentID": null,
        "Comment": "<div  class=\"ExternalClass5E1BFEDC348C43719AD940E644E0E0B6\">sdaeadfasdf</div>",
        "CommentType": "Public",
        "CommentDocumentName": null,
        "AppID": "1083",
        "Role": "Budget Analyst"
      }
    ]
  }
}

我的代码是onbind方法:

 Map<String, Integer> commentsCountMap = new HashMap<>();
    for(Result res : discussionsList) {
        String parentCommentId = res.getParentCommentID();
        // If the MyDocsResult has a parent comment
        if(parentCommentId != null) {
            // get the count for this parent comment (default to 0)
            int nbCommentsForParent = commentsCountMap.getOrDefault(parentCommentId, 0);
            // increment the count
            nbCommentsForParent++;
            // Update the Map with the new count
            commentsCountMap.put(parentCommentId, nbCommentsForParent);
            System.out.println(commentsCountMap);
            Log.d("Count:",commentsCountMap.toString());


        }
    }

例如 id 1439,有两个 ParentCommentID,因此在这种情况下,对于 id 1439 应该有两个评论,我尝试在我的中使用 recyclerview 适配器但它不起作用。

最佳答案

我认为您需要遍历结果列表,当您找到具有父评论的结果时,您进入 map ,获取父评论,将其计数加一并将其放回 map :

假设您的 Result 类是这样的:

class Result {
    private String id;
    private String parentCommentID;

    public Result(String id, String parentCommentID) {
        this.id = id;
        this.parentCommentID = parentCommentID;
    }

    // GETTERS/SETTERS
}

您有一个包含 3 个结果的讨论列表

    discussionsList = Arrays.asList(
        new Result("1439", null),
        new Result("1500", "1439"),
        new Result("1801", "1439")
    );

与您的情况一样,1439没有父级,1500和1501都有1439作为父级

那么你可以做这样的事情:

Map<String, Integer> commentsCountMap = new HashMap<>();
// Loop through the discussion Map
for(Result res : discussionsList) {
    String parentCommentId = res.getParentCommentID();
    // If the Result has a parent comment
    if(parentCommentId != null) {
        // get the count for this parent comment (default to 0)
        int nbCommentsForParent = commentsCountMap.getOrDefault(parentCommentId, 0);
        // increment the count
        nbCommentsForParent++;
        // Update the Map with the new count
        commentsCountMap.put(parentCommentId, nbCommentsForParent);
    }
}

System.out.println(commentsCountMap);

此输出

{1439=2}

关于java - 如何在列表中计算相似id对象并在recyclerview中显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56474587/

相关文章:

Java 教程相关性

java - 如何使用 JVMTI 获取 java 对象的内存地址(不是哈希码)

android - ListView 对齐问题

android - OAuth、Twitter 和 Android : fails in http-communication with the server 问题

mysql - Express Mysql 的 JSON 输出

javascript - Vue.js - 如何逐个对象获取 JSON 数据?

Java EE 6 - 作为有状态 session bean 的有状态 REST

java - 如何将 Eclipse Java SE 应用程序转换为 J2E 应用程序?

android - 如何在不使用@Composable 注释的情况下为撰写功能创建扩展?

java - Android Volley 将 json 数据发布到服务器