CubeId { @Override public int hashCode() { return Arrays.deepHashCode(dimensionIds) + Arrays.deepHashCode(dimensionsValues); } private  CubeId(@NonNull String[] dimensionIds, @NonNull String[] dimensionsValues); @NonNull static CubeId root(@NonNull String... dimensionIds); @NonNull static CubeId root(@NonNull List<String> dimensionIds); @NonNegative int getLevel(); @NonNegative int getMaxLevel(); @NonNull String getDimensionValue(@NonNegative int index); @NonNull Stream<String> getDimensionValueStream(); @NonNull String getDimensionId(@NonNegative int index); @NonNegative int getDepth(); boolean isRoot(); boolean isSeries(); boolean isVoid(); @NonNull CubeId child(@NonNull String... dimensionValues); boolean isAncestorOf(@NonNull CubeId input); @Override String toString(); @Override boolean equals(Object obj); @Override int hashCode();  }
@Test public void testHashCode() { assertThat(EMPTY.hashCode()) .isEqualTo(EMPTY.hashCode()) .isNotEqualTo(SECTOR_REGION.hashCode()); assertThat(SECTOR_REGION.hashCode()) .isEqualTo(SECTOR_REGION.hashCode()) .isNotEqualTo(INDUSTRY.hashCode()); assertThat(INDUSTRY.hashCode()) .isEqualTo(INDUSTRY.hashCode()) .isEqualTo(SECTOR_REGION.child("industry").hashCode()); }