31 votes

Obtenir des éléments peu courants à partir de deux listes - KOTLIN

J'ai deux listes de la même classe modèle (STUDENT), un exemple de structure d'objet étudiant est donné ci-dessous,

{
    "_id": "5a66d78690429a1d897a91ed",
        "division": "G",
        "standard": "X",
        "section": "Secondary",
        "lastName": "Sawant",
        "middleName": "Sandeep",
        "firstName": "Shraddha",
        "pin": 12345,
        "isEditable": true,
        "isTracked": false
}

Une liste contient 3 objets et une autre 2. Disons que la liste A contient 1, 2, 3 étudiants et que la liste B contient 1, 2, 3 étudiants.

Ma question est donc la suivante : existe-t-il des fonctions intégrées pour obtenir l'élément non commun ? en comparant seulement l'identifiant ? Sinon, comment puis-je résoudre ce problème ?

Pour votre information, voici les deux approches que j'ai utilisées pour résoudre le problème, mais j'ai échoué lamentablement.

Approche 1.

internal fun getDistinctStudents(studentsList: List<Students>, prefStudents: List<Students>): List<Students> {
    val consolidated = prefStudents.filter {
        prefStudents.any { students: Students -> it._id == students._id }
    }
    return prefStudents.minus(consolidated)
}

Approche 2.

internal fun getDistinctStudents(studentsList: List<Students>, prefStudents: List<Students>): List<Students> {
    val consolidatedStudents = studentsList + prefStudents
    val distinctStudents = consolidatedStudents.distinctBy{ it._id }
    return prefStudents.minus(distinctStudents)
}

Toute forme d'aide sera grandement appréciée.

Merci

2 votes

Consolidez les deux listes et créez une carte de hachage (hashmap) de la chaîne à l'entier qui est l'identifiant de l'étudiant au nombre d'occurrences, puis bouclez sur la carte de hachage et récupérez les clés qui n'ont qu'une seule occurrence.

0 votes

Vous pouvez créer une correspondance entre l'étudiant et le nombre d'occurrences afin d'obtenir la liste des étudiants à la fin.

1voto

user9287162 Points 11

Je suis sur mon portable en ce moment, donc je ne peux pas le tester, mais cela pourrait fonctionner pour ce dont vous avez besoin. Utilisation de subtract de stdlib https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/subtract.html

internal fun getDistinctStudents(studentsList: List<Students>, prefStudents: 
List<Students>): List<Students> {
    return prefStudents.subtract(studentList) + studentList.subtract(prefStudents)
}

0 votes

Merci pour l'effort, mais par objets communs je voulais dire l'identifiant de l'étudiant seulement, seul l'identifiant peut être le même, le reste des données peut ou peut être différent, donc si j'utilise la soustraction le cas se casse si l'identifiant est le même et le nom est différent.

0 votes

Je vois. Désolé, je supposais que Student était une classe de données et que id/name faisait partie du constructeur primaire.

0 votes

Aucun problème Encore une fois, merci pour vos efforts :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X