J'ai une fonction grossière et je veux la nettoyer. Tout ce qu'il contient est des cartes, une boucle for, et si les déclarations.Groovy - Fonctions de nettoyage
Fondamentalement, j'ai une carte que je voudrais saisir seulement certaines informations de mais l'une des clés dont j'ai besoin change d'un nombre dans chaque carte. Je pensais que peut-être une simple déclaration de commutateur ou quelque chose devrait le réparer, mais je suis souvent confondu avec la simplification de telles choses.
Voici ce que la fonction ressemble:
public void separateBooksFromList() {
book1 = [:] //map for book1
book2 = [:] //map for book2
book3 = [:] //map for book3
book4 = [:] //map for book4
book5 = [:] //map for book5
book6 = [:] //map for book6
book7 = [:] //map for book7
book8 = [:] //map for book8
book9 = [:] //map for book9
book10 = [:] //map for book10
lastModified = new Date(dataFile.lastModified()) //last time the file was scanned
readDate = new Date() //current date the text file was read
for(int i = 0; i < bookList.size(); i++) {
if(i==0) {
book1['lastScan'] = lastModified
book1['readDate'] = readDate
book1['bookNumber'] = bookList['Book Number 0'][i] // <- only part of the map that changes
book1['bookTitle'] = bookList['Book Title'][i]
}
if(i==1) {
book2['lastScan'] = lastModified
book2['readDate'] = readDate
book2['bookNumber'] = bookList['Book Number 1'][i] // <- only part of the map that changes
book2['bookTitle'] = bookList['Book Title'][i]
}
if(i==2) {
book3['lastScan'] = lastModified
book3['readDate'] = readDate
book3['bookNumber'] = bookList['Book Number 2'][i] // <- only part of the map that changes
book3['bookTitle'] = bookList['Book Title'][i]
}
if(i==3) {
book4['lastScan'] = lastModified
book4['readDate'] = readDate
book4['bookNumber'] = bookList['Book Number 3'][i] // <- only part of the map that changes
book4['bookTitle'] = bookList['Book Title'][i]
}
if(i==4) {
book5['lastScan'] = lastModified
book5['readDate'] = readDate
book5['bookNumber'] = bookList['Book Number 4'][i] // <- only part of the map that changes
book5['bookTitle'] = bookList['Book Title'][i]
}
if(i==5) {
book6['lastScan'] = lastModified
book6['readDate'] = readDate
book6['bookNumber'] = bookList['Book Number 5'][i] // <- only part of the map that changes
book6['bookTitle'] = bookList['Book Title'][i]
}
if(i==6) {
book7['lastScan'] = lastModified
book7['readDate'] = readDate
book7['bookNumber'] = bookList['Book Number 6'][i] // <- only part of the map that changes
book7['bookTitle'] = bookList['Book Title'][i]
}
if(i==7) {
book8['lastScan'] = lastModified
book8['readDate'] = readDate
book8['bookNumber'] = bookList['Book Number 7'][i] // <- only part of the map that changes
book8['bookTitle'] = bookList['Book Title'][i]
}
if(i==8) {
book9['lastScan'] = lastModified
book9['readDate'] = readDate
book9['bookNumber'] = bookList['Book Number 8'][i] // <- only part of the map that changes
book9['bookTitle'] = bookList['Book Title'][i]
}
if(i==9) {
book10['lastScan'] = lastModified
book10['readDate'] = readDate
book10['bookNumber'] = bookList['Book Number 9'][i] // <- only part of the map that changes
book10['bookTitle'] = bookList['Book Title'][i]
}
}
}
Comme vous pouvez le voir, il est tout à fait une fonction laid. Est-ce que je peux faire une simple déclaration de changement ou quelque chose pour réduire le code et le rendre plus professionnel?
Wow c'est plutôt cool. J'ai dû regarder 'int.times' pour voir ce qu'il a fait. Merci de me montrer ce Chris. C'est très utile et a l'air très propre. Donc, si je voulais que les grails génèrent une page à partir de la liste des livres, je pourrais juste la parcourir et ajouter les valeurs en fonction des clés correctes? Merci encore – StartingGroovy
.times est une fonction amusante, mais vous devez utiliser eachWithIndex à la place. Mieux encore, la méthode de collecte vous permet de construire une liste au fur et à mesure, mais ne fonctionnera pas dans cette situation puisque vous utilisez les index dans la liste finale. – Blacktiger
Merci pour plus de conseils Blacktiger. J'ai fini par utiliser eachWithIndex pour les imprimer et m'assurer que tout est en ordre de marche. Je vais aussi regarder un peu plus dans la méthode de collecte. C'est malheureux groovy est lent par rapport à Java, j'apprécie comment il réduit tellement de code si. – StartingGroovy