@Nonnull @Override public Map<Long, Double> score(long user, @Nonnull Collection<Long> items) { LongSet itemSet = LongUtils.frozenSet(items); double base = model.getIntercept() + model.getUserBias(user); return LongUtils.flyweightMap(itemSet, iid -> base + model.getItemBias(iid)); }
@Test public void testEmptyMap() { Long2DoubleMap map = LongUtils.flyweightMap(LongSets.EMPTY_SET, x -> x); assertThat(map.keySet(), hasSize(0)); assertThat(map.size(), equalTo(0)); assertThat(map.isEmpty(), equalTo(true)); assertThat(map.getOrDefault(10, Math.PI), equalTo(Math.PI)); }
@Test public void testSingletonMap() { Long2DoubleMap map = LongUtils.flyweightMap(LongSets.singleton(42L), x -> x); assertThat(map.keySet(), hasSize(1)); assertThat(map.keySet(), contains(42L)); assertThat(map.size(), equalTo(1)); assertThat(map.isEmpty(), equalTo(false)); assertThat(map, hasEntry(42L, 42.0)); assertThat(map.getOrDefault(10, Math.PI), equalTo(Math.PI)); assertThat(map.get(10), equalTo(0.0)); }
@Test public void testMapSomeStuff() { for (Set<Long> keys: someSets(longs())) { Long2DoubleMap map = LongUtils.flyweightMap(LongUtils.frozenSet(keys), x -> (-x) % 10); assertThat(map.keySet(), equalTo(keys)); assertThat(map.size(), equalTo(keys.size())); for (Long k: keys) { assertThat(map, hasEntry(k, (double) ((-k) % 10))); } } } }
@Nonnull @Override public Map<Long, Double> score(long user, @Nonnull Collection<Long> items) { LongSet itemSet = LongUtils.frozenSet(items); double base = model.getIntercept() + model.getUserBias(user); return LongUtils.flyweightMap(itemSet, iid -> base + model.getItemBias(iid)); }