@Override public <T> Optional<List<T>> getObjectList(DataQuery path, Class<T> objectClass) { return getViewList(path).flatMap(viewList -> Sponge.getDataManager().getTranslator(objectClass).map(serializer -> viewList.stream() .map(serializer::translate) .collect(Collectors.toList()) ) ); }
@SuppressWarnings("unchecked") @Override public <T extends DataSerializable> Optional<List<T>> getSerializableList(DataQuery path, Class<T> clazz) { checkNotNull(path, "path"); checkNotNull(clazz, "clazz"); return Stream.<Supplier<Optional<List<T>>>>of( () -> { if (clazz.isAssignableFrom(CatalogType.class)) { return (Optional<List<T>>) (Optional<?>) getCatalogTypeList(path, (Class<? extends CatalogType>) clazz); } return Optional.empty(); }, () -> getViewList(path).flatMap(list -> Sponge.getDataManager().getBuilder(clazz).map(builder -> list.stream() .map(builder::build) .filter(Optional::isPresent) .map(Optional::get) .collect(Collectors.toList()) ) ) ) .map(Supplier::get) .filter(Optional::isPresent) .map(Optional::get) .findFirst(); }
@Override public <T> Optional<List<T>> getObjectList(DataQuery path, Class<T> objectClass) { return getViewList(path).flatMap(viewList -> Sponge.getDataManager().getTranslator(objectClass).map(serializer -> viewList.stream() .map(serializer::translate) .collect(Collectors.toList()) ) ); }
@SuppressWarnings("unchecked") @Override public <T extends DataSerializable> Optional<List<T>> getSerializableList(DataQuery path, Class<T> clazz) { checkNotNull(path, "path"); checkNotNull(clazz, "clazz"); return Stream.<Supplier<Optional<List<T>>>>of( () -> { if (clazz.isAssignableFrom(CatalogType.class)) { return (Optional<List<T>>) (Optional<?>) getCatalogTypeList(path, (Class<? extends CatalogType>) clazz); } return Optional.empty(); }, () -> getViewList(path).flatMap(list -> Sponge.getDataManager().getBuilder(clazz).map(builder -> list.stream() .map(builder::build) .filter(Optional::isPresent) .map(Optional::get) .collect(Collectors.toList()) ) ) ) .map(Supplier::get) .filter(Optional::isPresent) .map(Optional::get) .findFirst(); }