package xapi.collect.impl; import xapi.fu.In1; import xapi.fu.In2; import java.util.Map.Entry; public interface EntryIterable <K, V> { Iterable<Entry<K,V>> entries(); default EntryIterable <K, V> iterate(In2<K, V> callback) { entries().forEach( // Need to be explicit about the generics for some reason :-/ callback.<Entry<K, V>>adapt(Entry::getKey, Entry::getValue) .toConsumer() ); return this; } default void forBoth(In2<K, V> callback) { entries().forEach(callback.mapAdapter()); } default void forValues(In1<V> callback) { entries().forEach(callback.<K>ignore1().mapAdapter()); } }