【问题标题】:How to sort main array using a child array (Android)如何使用子数组对主数组进行排序(Android)
【发布时间】:2020-01-10 01:27:49
【问题描述】:

我想使用子数组值对我的主数组进行排序。输出如下:

{
  "status": true,
  "statusCode": 100,
  "message": "",
  "data": {
    "win": [
      {
        "id": "1",
        "admin": [
          {
            "id": "38",
            "name": "Admin 05",
            "point": {
              "id": "96",
              "name": "96"
            }
          }
        ]
      },
      {
        "id": "2",
        "admin": [
          {
            "id": "39",
            "name": "Admin 06",
            "point": {
              "id": "95",
              "name": "95"
            }
          }
        ]
      },
      {
        "id": "3",
        "admin": [
          {
            "id": "26",
            "name": "Admin 05",
            "point": {
              "id": "98",
              "name": "98"
            }
          }
        ]
      }
    ]
  }
}

我想要如下数组,但我做不到。

id = 3 // 首先

id = 1 // 秒

id = 2 // 第三个等等。

我在下面尝试过:

Collections.sort(loWinArray, object : Comparator<Win> {
                    override fun compare(obj1: Win, obj2: Win): Int {
                        // ## Ascending order
                        return (obj2.admin.get(0).point!!.name.toInt() - obj1.admin.get(0).point!!.name.toInt()) // To compare string values
                    }
                })

有人可以帮忙吗?

【问题讨论】:

    标签: android arrays sorting kotlin


    【解决方案1】:

    如果你希望它按点 ID 排序,从大到小,试试这个:

    val sortedArray = loWinArray.sortedByDescending { item -> item.admin.first().id.toInt() }
    

    【讨论】:

    • 引起:java.util.NoSuchElementException:列表为空。在 kotlin.collections.CollectionsKt___CollectionsKt.first(_Collections.kt:197) 在 com.meapp.PanelManagerActivity$onCreate$$inlined$sortedByDescending$1.compare(Comparisons.kt:321) 在 java.util.TimSort.countRunAndMakeAscending(TimSort.java :355) 在 java.util.TimSort.sort(TimSort.java:234) 在 java.util.Arrays.sort(Arrays.java:1432) 在 kotlin.collections.ArraysKt___ArraysJvmKt.sortWith(_ArraysJvm.kt:1737) 得到异常有了这个,列表不为空
    【解决方案2】:

    试试这个升序,你试过的它会返回降序

     Collections.sort(loWinArray, object : Comparator<Win> {
                            override fun compare(obj1: Win, obj2: Win): Int {
                                // ## Ascending order
                                return obj1.admin.get(0).point!!.name.toInt() - obj2.admin.get(0).point!!.name.toInt()
                            }
                        })
    

    【讨论】:

    • 引起:java.lang.IndexOutOfBoundsException:索引:0,大小:0 at java.util.ArrayList.get(ArrayList.java:437) at com.meapp.PanelManagerActivity$onCreate$5.compare (ManagerActivity.kt:142) at com.meapp.PanelManagerActivity$onCreate$5.compare(ManagerActivity.kt:139) at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) 遇到上述异常
    • @Rara 你的列表是空的
    • val test = ArrayList() test.add("4") test.add("1") test.add("3") test.add("7") test .add("2") Collections.sort(test) { o1, o2 -> Integer.parseInt(o1) - Integer.parseInt(o2) } for (i in test.indices) { Log.e("Test => ", 测试[i]) }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    相关资源
    最近更新 更多