Scala混用Java的集合类调用scala的foreach遍历问题
生活随笔
收集整理的這篇文章主要介紹了
Scala混用Java的集合类调用scala的foreach遍历问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述
[ERROR] /Users/jack/book/lightsword/src/main/scala/com/springboot/in/action/service/LightSwordUserDetailService.scala:31: error: value foreach is not a member of java.util.List[com.springboot.in.action.entity.UserRole] [INFO] for (userRole <- userRoles) { [INFO] ^ [ERROR] one error found原因分析
未添加Scala與Java集合庫的隱式轉換。如下:
import scala.collection.JavaConversions._由于都運行在JVM上,Java與Scala之間基本能做到無縫的集成,區別主要在于各自的API各有不同。由于Scala為集合提供了更多便捷的函數,因此,Java與Scala在集合之間的互操作,或許是在這種多語言平臺下使用最為頻繁的。
Scala中操作Java集合
兩種情況需要在Scala中操作Java集合。一種是Scala調用了其他的Java庫,針對Java集合需要轉換為Scala集合,如此才能享受Scala集合提供的福利;另一種是編寫了Scala程序,但需要提供給Java庫,為了更好地無縫集成,要讓Java庫體會不到Scala的存在。
Scala調用Java庫
為了享用Scala提供的集合特性,在Scala程序中若要調用Java庫,通常需要將其轉換。
我們的UserRoleDao代碼如下:
package com.springboot.in.action.daoimport java.util.Listimport com.springboot.in.action.entity.UserRole import org.springframework.data.jpa.repository.Query import org.springframework.data.repository.CrudRepositoryimport scala.language.implicitConversionstrait UserRoleDao extends CrudRepository[UserRole, Integer] {def findAll(): List[UserRole] // JavaConversionsdef save(u: UserRole): UserRoledef findOne(id: Integer): UserRole@Query(value = "SELECT * FROM user_role where user_id = ?1", nativeQuery = true)def listByUserId(userId: Integer): List[UserRole]}其中,def listByUserId(userId: Integer): List[UserRole],為了使用Jpa的CrudRepository,我們返回的是java.util.List類型。
然后我們在service代碼中,應該這樣調用:
val userRoles = userRoleDao.listByUserId(user.id)// Scala中調用java的collection類,使用scala的foreach,編譯器會提示無法找到result的foreach方法。因為這里的userRoles的類型為java.util.List。若要將其轉換為Scala的集合,就需要增加如下語句:import scala.collection.JavaConversions._for (userRole <- userRoles) {val roleId = userRole.roleIdval roleName = roleDao.findOne(roleId).roleauthorities.add(new SimpleGrantedAuthority(roleName))System.err.println("username is " + username + ", " + roleName)}如果沒有加上這一句:
import scala.collection.JavaConversions._就會報開頭的錯誤。
解決方案
加上這一句:
import scala.collection.JavaConversions._ 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Scala混用Java的集合类调用scala的foreach遍历问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米申请“小米物流”商标 说好的“快递板
- 下一篇: 《像计算机科学家一样思考Java》——