Reputation: 311
Basically I have three variables a,b and c. The variables have certain relationship among them. I need to store the variables in a HashSet so that each variable will be different and there wont be any redundancy.
Java way:
In java I just create a custom class, override hash and equal methods in that custom class and I will be done.
HashSet<CustomClass> hSet = new HashSet<CustomClass>();
Scala way (Scala newbie):
Introduction to Sets and Maps for Scala
Here I am confused to choose between a trait , class and an object. Obviously at the first look I cannot have trait and class assigned to a var / val (Please let me know if the above can be done). So object is the way to go.
object State {
var a: Int;
var b: Int;
var c: Int;
}
Question 1: How should I define a custom (class/trait/object) HashSet?
Normal HashSet declaration in Scala: var hSet = new HashSet();
Question 2: How to assign value to the new object? for example,
var newState = State;
newState.a = 100;
hSet.add(newState);
Error : type mismatch; found : Int(100) required: Int.type
Thank you
Upvotes: 1
Views: 551
Reputation: 5999
The short answer is: the Scala way is the same as the Java way. That said, case classes can help you by automatically constructing a valid hash and equals methods (and toString
and apply
for that matter). It goes like this:
case class MyClass(myInt: Int, myString: String)
val hSet = new mutable.HashSet[MyClass]();
hSet += MyCLass(2, "foo")
Note that HashSets have type parameters, just as in Java. For immutable sets the syntax varies a little, but comming from Java this will feel easier.
Also, when you define an object
you are basically defining a class with a single instance (a singleton pattern). This is clearly not what you want here.
Upvotes: 1