diff --git a/src/main/java/cc/ryanc/halo/utils/ServiceUtils.java b/src/main/java/cc/ryanc/halo/utils/ServiceUtils.java new file mode 100644 index 000000000..9f79e7e8d --- /dev/null +++ b/src/main/java/cc/ryanc/halo/utils/ServiceUtils.java @@ -0,0 +1,86 @@ +package cc.ryanc.halo.utils; + +import cc.ryanc.halo.logging.Logger; +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * Utilities for service. + * + * @author johnniang + */ +public class ServiceUtils { + + private final static Logger LOGGER = Logger.getLogger(ServiceUtils.class); + + private ServiceUtils() { + } + + /** + * Fetches id to set. + * + * @param datas data collection + * @param mappingFunction calculate the id in data list + * @param id type + * @param data type + * @return a set of id + */ + public static Set fetchProperty(final Collection datas, Function mappingFunction) { + return CollectionUtils.isEmpty(datas) ? + Collections.emptySet() : + datas.stream().map(mappingFunction).collect(Collectors.toSet()); + } + + /** + * Converts a list to a list map where list contains id in ids. + * + * @param ids id collection + * @param list data list + * @param mappingFunction calculate the id in data list + * @param id type + * @param data type + * @return a map which key is in ids and value containing in list + */ + public static Map> convertToListMap(Collection ids, Collection list, Function mappingFunction) { + Assert.notNull(mappingFunction, "mapping function must not be null"); + + if (CollectionUtils.isEmpty(ids) || CollectionUtils.isEmpty(list)) { + return Collections.emptyMap(); + } + + Map> resultMap = new HashMap<>(); + + list.forEach(data -> resultMap.computeIfAbsent(mappingFunction.apply(data), id -> new LinkedList<>()).add(data)); + + ids.forEach(id -> resultMap.putIfAbsent(id, Collections.emptyList())); + + return resultMap; + } + + /** + * Converts to map (key from the list data) + * + * @param list data list + * @param mappingFunction calclulate the id from list data + * @param id type + * @param data type + * @return a map which key from list data and value is data + */ + public static Map convertToMap(Collection list, Function mappingFunction) { + Assert.notNull(mappingFunction, "mapping function must not be null"); + + if (CollectionUtils.isEmpty(list)) { + return Collections.emptyMap(); + } + + Map resultMap = new HashMap<>(); + + list.forEach(data -> resultMap.putIfAbsent(mappingFunction.apply(data), data)); + + return resultMap; + } +}