I am having problems mapping this data
1 35
1 30
1 20
2 10
3 40
3 25
3 15
I tried using the HashMap but it would only map to the last occurrence of this data.
The behavior of Map
and HashMap
you describe is the intended behavior, as other commenters note. What you want is a multimap. You can roll your own (don't do this-- other commenters suggest maps to lists, but that quickly becomes cumbersome. If you really want to roll your own, roll your own generic multimap with list/set values and hide the complexity.) or use Guava's multimap. Example:
import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;
public static void main(String[] args)
{
final SetMultimap<Integer, Integer> foo = HashMultimap.create();
foo.put( 1,35);
foo.put( 1,30);
foo.put( 1,20);
foo.put( 2,10);
foo.put( 3,40);
foo.put( 3,25);
foo.put( 3,15);
System.out.println(foo);
}
Output:
{1=[35, 20, 30], 2=[10], 3=[25, 40, 15]}
If you want to access the values, there are a couple of ways depending on what you want to do. Just calling get(Integer key)
will return a collection of the values.
Also, check out this answer, which cites lots of related goodness in Guava.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With