Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need help mapping this data in Java

Tags:

java

map

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.

like image 827
Steffan Harris Avatar asked Dec 01 '22 09:12

Steffan Harris


1 Answers

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.

like image 171
andersoj Avatar answered Dec 15 '22 04:12

andersoj