DimensionalTable { @SuppressWarnings("element-type-mismatch") public DATA getDataPoint(List<?> keys) { Preconditions.checkNotNull(keys); Preconditions.checkArgument(keys.size() == dimensionNameToIndex.size(), "All the keys must be specified."); return dimensionKeysToData.get(keys); } private  DimensionalTable();  DimensionalTable(List<String> headerNames); void appendRow(DATA data, Object... keys); void appendRow(DATA data, Map<String, ?> keys); @SuppressWarnings("element-type-mismatch") DATA getDataPoint(List<?> keys); DATA getDataPoint(Map<String, ?> keys); List<DATA> getDataPoints(Map<String, ?> keys); List<DATA> getAllDataPoints(); int size();  }
@Test public void getDataPointTest() { DimensionalTable<Integer> table = createTestTable(); Integer point = table.getDataPoint(Lists.newArrayList("google", "taco bell", "Ukraine")); Assert.assertEquals((Integer)6, point); Map<String, String> selectionValues = Maps.newHashMap(); selectionValues.put("publisher", "amazon"); selectionValues.put("advertiser", "burger king"); selectionValues.put("location", "Czech"); point = table.getDataPoint(selectionValues); Assert.assertEquals((Integer)7, point); }