title: Map with combination of enums as keys
body: <p>I was wondering if there exists any <code>Map&lt;K, V&gt;</code> implementation that takes a combination of 2 or more enums for its key.</p>
  
  <p>I'll provide a simplified example.</p>
  
  <p>Say I have two enums <code>DiceEyes</code> and <code>CardSuit</code>:</p>
  
  <pre><code>public enum DiceEyes {
      ONE, TWO, THREE, FOUR, FIVE, SIX
  }
  
  public enum CardSuit {
      HEARTS, DIAMONDS, SPADES, CLUBS
  }
  </code></pre>
  
  <p>Now I have 6 * 4 = 24 images from which I would like to show exactly one, based on what a user selected in a GUI - he selects a <code>DiceEyes</code> and a <code>CardSuit</code>.</p>
  
  <p>I have no control over the filenames of the images. So I cannot be smart by naming the images <code>&lt;DiceType&gt;-&lt;CardSuit&gt;-.png</code> or whatsoever. Therefore I need a mapping of the combination of a <code>DiceType</code> and a <code>CardSuit</code> to the filename.</p>
  
  <p>I have already thought about a solution that operates on an <code>EnumMap</code> of <code>EnumMap</code>s:</p>
  
  <pre><code>EnumMap&lt;DiceType, EnumMap&lt;CardSuit, String&gt;&gt; ... = new ...;
  </code></pre>
  
  <p>But that looks overcomplicated to me. A colleague would then think that <code>DiceType</code> is more or less important than a <code>CardSuit</code>, looking at the order of the types.</p>
  
  <p>Introducing a wrapper class for just this purpose also seems like overkill to me. When I have to use it in a <code>Map</code>, I would need to implement <code>equals()</code> and <code>hashCode()</code> which for this purpose seems just too much. With an enum you are already guaranteed of object equality, so I would like to stay with the enums.</p>
  
  <p>How can this be achieved without introducing a specific class or too much overhead?</p>