default <P extends Document, T extends Document> Stream<T> children(
            String key, BiFunction<P, Map<String, Object>, T> constructor) {

        final List<Map<String, Object>> list = get(key)
            .map(DocumentUtil::castToDocumentList)
            .orElse(null);

        if (list == null) {
            return Stream.empty();
        } else {
            @SuppressWarnings("unchecked")
            final P thizz = (P)this;
            return list.stream().map(map -> constructor.apply(thizz, map));
        }
    }
Returns the children on the specified key, instantiated using the 
specified constructor. This instance will be used as parent to the
constructor.

@param <P>          the parent type
@param <T>          the child type
@param key          the key
@param constructor  the child constructor to use
@return             a stream of constructed children

@see  #children()
runtime-parent/runtime-config/src/main/java/com/speedment/runtime/config/Document.java