У меня есть два набора объектов, и я хочу получить пересечение двух наборов.Объекты в наборах выглядят так:
@BeanInfo
class User {
@JsonProperty
@BeanProperty
var name:String = ""
@JsonProperty
@BeanProperty
var id:Long = 0
override def toString = name
override def equals(other: Any)= other match {
case other:User => other.id == this.id
case _ => false
}
}
В другом классе я получаю наборы пользователей и хочу видеть пересечение.
val myFriends = friendService.getFriends("me")
val friendsFriends = friendService.getFriends("otheruser")
println(myFriends & friendsFriends)
Приведенный выше код не работает и печатает
Set()
Однако, если я вручную перебираю наборы с помощью foreach, я получаю желаемый результат
var matchedFriends:scala.collection.mutable.Set[User] = new HashSet[User]()
myFriends.foreach(myFriend => {
friendsFriends.foreach(myFriend => {
if(myFriend == myFriend){
matchedFriends.add(myFriend)
}
})
})
println(matchedFriends)
Вышеприведенный код печатает
Set(Matt, Cass, Joe, Erin)
Это прекрасно работает
val set1 = Set(1, 2, 3, 4)
val set2 = Set(4,5,6,7,1)
println(set1 & set2)
Вышеуказанные отпечатки
Set(1, 4)
Выполняют только заданные операции & & - и т.д ..на примитивных объектах?Должен ли я сделать что-то дополнительное к моему объекту пользователя, чтобы это работало?