package com.github.dtschust.zork.types; import com.github.dtschust.zork.objects.ZorkObject; import java.util.Collection; import java.util.Map; import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; public class ZorkMapByName { private final Map backing; public ZorkMapByName(final Collection source) { backing = source.stream().collect(Collectors.toMap(ZorkObject::getName, Function.identity())); } public void put(final T object) { backing.put(object.getName(), object); } public Optional get(final String name) { return Optional.ofNullable(backing.get(name)); } public boolean containsName(final String name) { return backing.containsKey(name); } public Collection values() { return backing.values(); } }