Создание нового экземпляра класса данных Kotlin с отсортированным внутренним классом данных - PullRequest
0 голосов
/ 30 мая 2019

У меня есть класс данных Kotlin с именем ParcelBoxByID.kt, и в какой-то момент мне нужно удалить некоторые Locker's из класса данных ParcelBoxByID.kt.

В качестве ввода я получаю один экземпляр ParcelBoxByID.kt, и мне нужно вернуть тот же ParcelBoxByID.kt, но с сортированным Locker's.Я не уверен, что удаление возможно даже в этом случае, поэтому также приемлемо создание нового набора ParcelBoxByID.kt или создание копии.

Но мой вопрос: как отсортировать внутренний список класса данных ивернуть еще родительский класс данных с отсортированным внутренним классом?

Мне нужно отсортировать их по Locker.status.Поэтому, если Locker.status равно 0, то удалите его из нового экземпляра, а если это что-то еще, то оно может остаться.

ParcelBoxByID.kt

data class ParcelBoxByID(
        val kioskId: Int,
        val location: Location,
        val stats: Stats,
        val events: List<Event>,
        val lockers: List<Locker>,
        val settings: Settings,
        val modules: String,
        val masterPin: String,
        val visibility: String
) {
    data class Locker(
            val allocationId: Int,
            val kioskId: Int,
            val towerId: Int,
            val lockerId: Int,
            var lockId: String,
            val size: String,
            var lockerCode: String,
            val type: String,
            val status: String,
            val target: String,
            val shipment: Shipment,
            val allocationTime: String,
            val collectionTime: String,
            val lastCollectionDate: String,
            val corporateCustomer: Any,
            val limitedQuantity: Boolean,
            val payment: Any,
            val requestedSize: Any,
            val operatorPin: String,
            val customerPin: String,
            val lastMsgReceived: String,
            var edited: Boolean?
    ) {
        data class Shipment(
                val trackingCode: String,
                val requestedLockerSize: Any,
                val sender: Sender,
                val recipient: Recipient,
                val productId: String,
                val productName: String,
                val height: Any,
                val width: Any,
                val depth: Any,
                val lqWeight: Any,
                val requireIdentification: Boolean,
                val easilyCodeShipment: Any,
                val senderLogisticsContract: Any,
                val payerLogisticsContract: Any,
                val serviceCodes: List<String>,
                val labelProductName: Any,
                val labelProcessNumber: Any,
                val errandCode: Any,
                val international: Boolean,
                val nearbyLocker: Any,
                val ruokakassi: Any,
                val type: String,
                val trackingCode2: Any,
                val toiReturnSender: Any,
                val toiReturnRecipient: Any,
                val additionalInfo: Any,
                val senderName: String,
                val senderPhone: String,
                val recipientName: String,
                val recipientPhone: String,
                val recipientLocation: Any
        ) {
            data class Sender(
                    val phone: String,
                    val name: String,
                    val name2: Any,
                    val street: Any,
                    val postalCode: Any,
                    val city: Any,
                    val country: Any,
                    val locationId: Any,
                    val email: Any,
                    val routingCode: Any
            )

            data class Recipient(
                    val phone: String,
                    val name: String,
                    val name2: Any,
                    val street: Any,
                    val postalCode: Any,
                    val city: Any,
                    val country: Any,
                    val locationId: Any,
                    val email: Any,
                    val routingCode: Any
            )
        }
    }

    data class Settings(
            val LQ_ALLOWED: String,
            val RETURN_ALLOWED: String
    )

    data class Location(
            val id: Any,
            val type: String,
            val pupCode: Any,
            val postalCode: String,
            val routingServiceCode: Any,
            val countryCode: String,
            val postalCodeAreas: List<String>,
            val availability: Any,
            val customerServicePhoneNumber: String,
            val address: Address,
            val labelName: LabelName,
            val publicName: PublicName,
            val locationName: LocationName,
            val additionalInfo: AdditionalInfo,
            val dropOfTimeParcel: Any,
            val openingTimes: List<Any>,
            val coordinates: Any
    ) {
        data class LocationName(
                val fi: String,
                val sv: String,
                val en: String
        )

        data class PublicName(
                val fi: String,
                val sv: String,
                val en: String
        )

        data class Address(
                val fi: Fi,
                val sv: Sv,
                val en: En
        ) {
            data class Sv(
                    val address: Any,
                    val streetName: String,
                    val streetNumber: Any,
                    val postalCode: String,
                    val postalCodeName: String,
                    val municipality: String
            )

            data class En(
                    val address: Any,
                    val streetName: String,
                    val streetNumber: Any,
                    val postalCode: String,
                    val postalCodeName: String,
                    val municipality: String
            )

            data class Fi(
                    val address: Any,
                    val streetName: String,
                    val streetNumber: Any,
                    val postalCode: String,
                    val postalCodeName: String,
                    val municipality: String
            )
        }

        data class LabelName(
                val fi: String,
                val sv: String,
                val en: String
        )

        data class AdditionalInfo(
                val fi: String,
                val sv: String,
                val en: String
        )
    }

    data class Stats(
            val allLockers: Int,
            val emptyLockers: Int,
            val malfunctionLockers: Int,
            val forCustomer: Int,
            val forCourier: Int,
            val bySize: BySize,
            val incoming: Any
    ) {
        data class BySize(
                val XXSMALL: Xxsmall,
                val XSMALL: Xsmall,
                val SMALL: Small,
                val MEDIUM: Medium,
                val LARGE: Large,
                val XLARGE: Xlarge
        ) {
            data class Xxsmall(
                    val empty: Int,
                    val hasContent: Int
            )

            data class Medium(
                    val empty: Int,
                    val hasContent: Int
            )

            data class Xlarge(
                    val empty: Int,
                    val hasContent: Int
            )

            data class Xsmall(
                    val empty: Int,
                    val hasContent: Int
            )

            data class Large(
                    val empty: Int,
                    val hasContent: Int
            )

            data class Small(
                    val empty: Int,
                    val hasContent: Int
            )
        }
    }

    data class Event(
            val id: Int,
            val kioskId: Int,
            val eventType: String,
            val payload: Payload,
            val createdAt: String,
            val modifiedAt: String,
            val status: String,
            val target: String,
            val user: String
    ) {
        data class Payload(
                val exceptionType: String,
                val lockerId: Int,
                val towerId: Int
        )
    }
}

1 Ответ

0 голосов
/ 30 мая 2019

Вы можете скопировать свой класс данных, назначив отсортированный список:

val copyWithSortedLockers = parcelBoxByID.copy(
    lockers = parcelBoxByID.lockers.sortedBy(Locker::status)
)
...