### Question:
ListRegistry implements DynamicRegistry<T> { public T getItemByKey(final String id) { if (null != id) { for (final T item : items) { final String itemId = getItemKey(item); if (id.equals(itemId)) { return item; } } } return null; } ListRegistry(final KeyProvider<T> keyProvider,
                        final List<T> items); void add(final int pos,
                    final T item); @Override void register(final T item); boolean remove(final T item); @Override boolean contains(final T item); @Override boolean isEmpty(); Collection<T> getItems(); T getItemByKey(final String id); void clear(); int indexOf(final T item);  }### Answer:
@Test public void testGetItemByKey() { final String s1 = "an string 1"; final String s2 = "an string 2"; tested = new ListRegistry<>(keyProvider, new ArrayList<Object>(2) {{ add(s1); add(s2); }}); Object o1 = tested.getItemByKey(s1); Object o2 = tested.getItemByKey(s2); assertEquals(s1, o1); assertEquals(s2, o2); assertEquals(null, tested.getItemByKey(null)); assertEquals(null, tested.getItemByKey("unregistered string")); }