Ваш API ExtCollection.of(list).toMap
должен сохранять ссылку на коллекцию, поэтому вы не можете реализовать его только как интерфейс. Это реализация с простым классом:
public class ExtCollection<T_ELEM> {
private Collection<T_ELEM> collection;
private ExtCollection(Collection<T_ELEM> collection) {
this.collection = collection;
}
public static <T_ELEM> ExtCollection<T_ELEM> of(Collection<T_ELEM> collection){
return new ExtCollection<>(collection);
}
public <T_KEY> Map<T_KEY, T_ELEM> toMap(final Function<T_ELEM, T_KEY> getKey){
return collection.stream().collect(Collectors.toMap(getKey, Function.identity()));
}
}
Также вы можете расширить интерфейс, но вам нужно будет вызвать класс внутри метода ExtCollection.of
.
public interface ExtCollection<T_ELEM> extends Collection<T_ELEM> {
...
default <T_KEY> Map<T_KEY, T_ELEM> toMap(final Function<T_ELEM, T_KEY> getKey){
return stream().collect(Collectors.toMap(getKey, Function.identity()));
}
static<T_ELEM> ExtCollection<T_ELEM> of(Collection<T_ELEM> collection){
return new ExtCollection<T_ELEM>() {
...
};
}
}