Analogue of Kotlin Iterable.map but for single object

Viewed 187

I can transform a list with map in one line like this:

override suspend fun getAllTxtFile(): List<TxtFileModel> {
    return someDao.getAllTxtFile().map { with(txtFileDataMapper) { it.fromEntityToDomain() } }
}

But I don't know how to do it for single class object:

override suspend fun getTxtFile(txtFileName: String?): TxtFileModel {
    val txtFile = someDao.getTxtFile(txtFileName)
    val txtFileModel = with(txtFileDataMapper) { txtFile.fromEntityToDomain() }
    return txtFileModel
}

So, the difference is that for list I can return a value in one line but for a single object only in 3 lines.

That is not big deal but I wonder if exist some anologue for .map but for a single object. I want something like .mapSingleObject:

override suspend fun getTxtFile(txtFileName: String?): TxtFileModel {
    return someDao.getTxtFile(txtFileName).mapSingleObject{ with(txtFileDataMapper) { it.fromEntityToDomain() } }
}
1 Answers

You can use some functions from Kotlin standard library, such as let, run, or with.

If function fromEntityToDomain() is a TxtFile extension function defined within the txtFileDataMapper's class, you can use functions mentioned above:

override suspend fun getTxtFile(txtFileName: String?): TxtFileModel? = 
        someDao.getTxtFile(txtFileName)?.let { 
            with(txtFileDataMapper) { it.fromEntityToDomain() } 
        }
Related