@Override public ObjectCollection<Result> values() { return delegate.values(); }
@Override public Iterator<Result> iterator() { return delegate.values().iterator(); }
@Override public Map<Long,List<Entity>> grouped(TypedName<Long> attr) { Preconditions.checkArgument(attr != CommonAttributes.ENTITY_ID, "cannot group by entity ID"); EntityIndex idx = indexes.get(attr.getName()); if (idx == null) { return store.values() .stream() .filter(e -> e.hasAttribute(attr)) .collect(Collectors.groupingBy(e -> e.getLong(attr))); } else { return idx.getValues() .stream() .collect(Collectors.toMap(l -> (Long) l, idx::getEntities)); } }
@Test public void testHeadMap() { KeyedObjectMap<String> m = createMap("37", "59", "42", "67"); KeyedObjectMap<String> m2 = m.headMap(59L); assertThat(m2.size(), equalTo(2)); assertThat(m2.keySet(), contains(37L, 42L)); assertThat(m2.values(), contains("37", "42")); assertThat(m2.get(59L), nullValue()); assertThat(m2.get(42L), equalTo("42")); }
@Test public void testSubMap() { KeyedObjectMap<String> m = createMap("37", "59", "42", "67"); KeyedObjectMap<String> m2 = m.subMap(42L, 66L); assertThat(m2.size(), equalTo(2)); assertThat(m2.keySet(), contains(42L, 59L)); assertThat(m2.values(), contains("42", "59")); assertThat(m2.get(42L), equalTo("42")); assertThat(m2.get(37L), nullValue()); }
@Test public void testTailMap() { KeyedObjectMap<String> m = createMap("37", "59", "42", "67"); KeyedObjectMap<String> m2 = m.tailMap(59L); assertThat(m2.size(), equalTo(2)); assertThat(m2.keySet(), contains(59L, 67L)); assertThat(m2.values(), contains("59", "67")); assertThat(m2.get(59L), equalTo("59")); assertThat(m2.get(42L), nullValue()); }
@Test public void testSingletonMap() { KeyedObjectMap<String> m = createMap("42"); assertThat(m.size(), equalTo(1)); assertThat(m.isEmpty(), equalTo(false)); assertThat(m.get(42L), equalTo("42")); assertThat(m.get(39L), nullValue()); assertThat(m.firstLongKey(), equalTo(42L)); assertThat(m.lastLongKey(), equalTo(42L)); assertThat(m.keySet(), hasSize(1)); assertThat(m.values(), hasSize(1)); assertThat(m.entrySet(), hasSize(1)); assertThat(m.keySet(), contains(42L)); assertThat(m.values(), contains("42")); }
@Override public ObjectCollection<Result> values() { return delegate.values(); }
@Test public void testSomeItems() { KeyedObjectMap<String> m = createMap("37", "59", "42", "67"); assertThat(m.size(), equalTo(4)); assertThat(m.keySet(), hasSize(4)); assertThat(m.values(), hasSize(4)); assertThat(m.entrySet(), hasSize(4)); assertThat(m.get(42L), equalTo("42")); assertThat(m.get(37L), equalTo("37")); assertThat(m.get(59L), equalTo("59")); assertThat(m.get(67L), equalTo("67")); assertThat(m.containsKey(42L), equalTo(true)); assertThat(m.containsKey(2L), equalTo(false)); assertThat(m.containsKey(45L), equalTo(false)); assertThat(m.get(45L), nullValue()); assertThat(m.keySet(), contains(37L, 42L, 59L, 67L)); assertThat(m.values(), contains("37", "42", "59", "67")); }
@Test public void testEmptyMap() { KeyedObjectMap<String> m = createMap(); assertThat(m.size(), equalTo(0)); assertThat(m.isEmpty(), equalTo(true)); assertThat(m.get(42L), nullValue()); assertThat(m.keySet(), hasSize(0)); assertThat(m.values(), hasSize(0)); assertThat(m.entrySet(), hasSize(0)); try { m.firstLongKey(); fail("firstLongKey should fail on empty map"); } catch (NoSuchElementException e) { /* expected */ } try { m.lastLongKey(); fail("lastLongKey should fail on empty map"); } catch (NoSuchElementException e) { /* expected */ } }
@Override public Iterator<Result> iterator() { return delegate.values().iterator(); }
@Override public Map<Long,List<Entity>> grouped(TypedName<Long> attr) { Preconditions.checkArgument(attr != CommonAttributes.ENTITY_ID, "cannot group by entity ID"); EntityIndex idx = indexes.get(attr.getName()); if (idx == null) { return store.values() .stream() .filter(e -> e.hasAttribute(attr)) .collect(Collectors.groupingBy(e -> e.getLong(attr))); } else { return idx.getValues() .stream() .collect(Collectors.toMap(l -> (Long) l, idx::getEntities)); } }