Scala混用Java的集合类调用scala的foreach遍历问题
問(wèn)題描述
[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集合庫(kù)的隱式轉(zhuǎn)換。如下:
import scala.collection.JavaConversions._由于都運(yùn)行在JVM上,Java與Scala之間基本能做到無(wú)縫的集成,區(qū)別主要在于各自的API各有不同。由于Scala為集合提供了更多便捷的函數(shù),因此,Java與Scala在集合之間的互操作,或許是在這種多語(yǔ)言平臺(tái)下使用最為頻繁的。
Scala中操作Java集合
兩種情況需要在Scala中操作Java集合。一種是Scala調(diào)用了其他的Java庫(kù),針對(duì)Java集合需要轉(zhuǎn)換為Scala集合,如此才能享受Scala集合提供的福利;另一種是編寫(xiě)了Scala程序,但需要提供給Java庫(kù),為了更好地?zé)o縫集成,要讓Java庫(kù)體會(huì)不到Scala的存在。
Scala調(diào)用Java庫(kù)
為了享用Scala提供的集合特性,在Scala程序中若要調(diào)用Java庫(kù),通常需要將其轉(zhuǎn)換。
我們的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類(lèi)型。
然后我們?cè)趕ervice代碼中,應(yīng)該這樣調(diào)用:
val userRoles = userRoleDao.listByUserId(user.id)// Scala中調(diào)用java的collection類(lèi),使用scala的foreach,編譯器會(huì)提示無(wú)法找到result的foreach方法。因?yàn)檫@里的userRoles的類(lèi)型為java.util.List。若要將其轉(zhuǎn)換為Scala的集合,就需要增加如下語(yǔ)句: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)}如果沒(méi)有加上這一句:
import scala.collection.JavaConversions._就會(huì)報(bào)開(kāi)頭的錯(cuò)誤。
解決方案
加上這一句:
import scala.collection.JavaConversions._ 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Scala混用Java的集合类调用scala的foreach遍历问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小米申请“小米物流”商标 说好的“快递板
- 下一篇: java美元兑换,(Java实现) 美元