Say I create some object class like so
public class thing {
private String name;
private Integer num;
public oDetails (String a, Integer b) {
name = a;
num = b;
}
...gets/ sets/ etc
Now I want to create an arraylist to hold a number of this object class like so.
ArrayList<thing> myList = new ArrayList<thing>;
thing first = new thing("Star Wars", 3);
thing second = new thing("Star Wars", 1);
myList.add(first);
myList.add(second);
I would like to include some sort of logic so that in this case...when we try and add object "second" rather than add a new object to the arrayList, we add second.getNum() to first.getNum(). So if you were to iterate through the ArrayList it would be
"Star Wars", 4
I am having trouble coming up with an elegant way of handling this. And as the arraylist grows, searching through it to determine if there are duplicate name items becomes cumbersome. Can anyone provide some guidance on this?
If you want to have a set of unique objects, use
Set
instead ofList
.Also, if you want to define by yourself when objects are considered equal, consider overriding the
equals
andhashCode
methods of the class.You would have to create your own method to check to see if the the
name
field of class Thing was set to "Star Wars" then add to the correspondingnum
field of Class Thing, that is one possible solution.Another solution is to use a
Map
with the name field as the key, and the num field as the value.ex:
Hope this helps.
IMHO, it makes more sense to use a
Map<String, Integer>
instead of theArrayList
, or aMap<String, Thing>
if you don't want to change your class.You need to override the equals method and hashCode method in your class Thing in this way:
Then you could use it in this way:
In my case I'm using LinkedHashSet to maintain the order of insertion and because I think is going to be more efficient. I didn't try this example with ArrayList.
For more information you can read from here: why I override equals and hashCode in this way
If you want to use List finally than Write your
Comparator
,by writing Comparator you can create behaviour like set.