Function Groovy清理函数

Function Groovy清理函数,function,groovy,coding-style,Function,Groovy,Coding Style,我有一个粗俗的功能,我想清理它。它只包含一些映射、for循环和if语句 基本上,我有一张地图,我只想从中获取某些信息,但我需要的其中一个键在每个地图中改变一个数字 我在想,也许一个简单的switch语句或其他东西可以解决这个问题,但我经常对简化这些事情感到困惑 下面是函数的外观: public void separateBooksFromList() { book1 = [:] //map for book1 book2 = [:]

我有一个粗俗的功能,我想清理它。它只包含一些映射、for循环和if语句

基本上,我有一张地图,我只想从中获取某些信息,但我需要的其中一个键在每个地图中改变一个数字

我在想,也许一个简单的switch语句或其他东西可以解决这个问题,但我经常对简化这些事情感到困惑

下面是函数的外观:

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]
    }

  }

}
public void separateBooksFromList(){
book1=[:]//book1的映射
book2=[:]//book2的映射
book3=[:]//book3的映射
book4=[:]//book4的映射
book5=[:]//book5的映射
book6=[:]//book6的映射
book7=[:]//book7的映射
book8=[:]//book8的映射
book9=[:]//book9的映射
book10=[:]//book10的映射
lastModified=新日期(dataFile.lastModified())//上次扫描文件的时间
readDate=new Date()//读取文本文件的当前日期
对于(int i=0;ibook1['bookNumber']=bookList['bookNumber 0'][i]/您可以在这里做一些事情。您可以使用书籍列表,而不是book1、book2等。这将节省大量重复自己的时间

这几乎是一样的,但有了这个改变,它将创建一个10大小的列表(假设有10本书),其中有一个像以前一样的地图条目

public void separateBooksFromList() {
    lastModified = new Date(dataFile.lastModified())         //last time the file was scanned
    readDate = new Date()                                    //current date the text file was read

    // Use a list of Maps instead of separate variables
    int numberOfBooks =  bookList.size()
    def books = []
    numberOfBooks.times {
        books[it] = [
            lastScan: lastModified, 
            readDate: readDate, 
            bookNumber: booklist["Book Number $it"][it], 
            bookTitle: booklist["BookTitle"][it]
        ]
    }
}

哇,这太酷了。我必须查一下“int.times”来看看它做了什么。谢谢你给我看这个Chris。它非常有用而且看起来非常干净。所以如果我想让grails从书籍列表中生成一个页面,我可以让它迭代并根据键添加值。再次感谢你。times是一个有趣的函数,但是哟你应该改用eachWithIndex。更好的是,collect方法可以让你在运行时建立一个列表,但在这种情况下不起作用,因为你使用的是最终列表中的索引。感谢你提供更多提示Blacktiger。我最后使用eachWithIndex打印出来,确保一切正常。我将进一步研究还有collect方法,很不幸groovy比java慢,但我喜欢它能减少这么多代码。