我只想列印存盤在資料庫中的每個用戶的名稱。
我正在使用這個存盤庫:
@Repository
interface User: JpaSpecificationExecutor<User>, PagingAndSortingRepository<User, Long> {
@Query("from User")
fun findAllUsers(): Stream<User>
}
在此服務中:
@Service
class MyService(val user: User) {
private val log = LoggerFactory.getLogger(javaClass)
@Transactional(readOnly = true)
fun printNames() {
log.info("here")
user.findAllUsers().use { users ->
users.map { it.firstName }
}
}
}
并且只列印這里的控制臺,但沒有名字。
似乎map()自動關閉了流,但我不知道為什么以及如何解決它。當我只將 log.info(users.count()) 放入 use{} 塊時,它會列印存盤在資料庫中的用戶數。所以有一個用戶我可以列印。
我的問題是,如何列印給定流中的所有名稱?
uj5u.com熱心網友回復:
Kotlin 的use函式只是執行一些代碼(您的閉包函式)然后close在完成后呼叫接收器(在本例中為Stream)的一種簡寫方式。
你呼叫users的實際上是Stream<User>你的存盤庫回傳的,所以基本上你的代碼只是呼叫users.map {...}. 現在,map運算子是一個中間運算子,而且由于 Java 流是惰性的,所以在您呼叫終端運算子(例如.collect或.forEach)之前,它們實際上不會做任何事情。
假設您要列印用戶,請嘗試:
user.findAllUsers().use {
it.forEach { println(it.firstName) }
}
完整的作業示例(沒有 Spring 資料):
import java.util.stream.Stream
// simulate a repository
fun findAllUsers() = Stream.of("First", "Second", "Third")
fun printNames() {
findAllUsers().use {
it.forEach(::println)
}
}
fun main() {
printNames()
}
印刷:
First
Second
Third
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404717.html
標籤:
