package com.gt22.pbbot.utils; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import org.apache.commons.lang3.ArrayUtils; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.*; import java.util.function.*; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; public class MiscUtils { public static class JsonArrayUtils { public static List toList(JsonArray arr, Function mapper) { return toStream(arr).map(mapper).collect(Collectors.toList()); } public static List toStringList(JsonArray arr) { return toList(arr, JsonElement::getAsString); } private static Stream toStream(JsonArray arr, boolean parallel) { return StreamSupport.stream(Spliterators.spliterator(arr.iterator(), arr.size(), Spliterator.ORDERED), parallel); } public static Stream toStream(JsonArray arr) { return toStream(arr, false); } public static Stream toParallelStream(JsonArray arr) { return toStream(arr,true); } } public static class JoinUtils { public static BinaryOperator join(String delimiter) { return (s1, s2) -> s1 + delimiter + s2; } public static Optional join(Collection coll, Function mapper, String delimiter) { return coll.stream().map(mapper).reduce(join(delimiter)); } public static Optional join(Collection coll, String delimiter) { return coll.stream().reduce(join(delimiter)); } public static Optional join(T[] arr, Function mapper, String delimiter) { return Arrays.stream(arr).map(mapper).reduce(join(delimiter)); } public static Optional join(String[] arr, String delimiter) { return Arrays.stream(arr).reduce(join(delimiter)); } } public static class ArrayUtils { public static void forEach(T[] arr, Consumer action) { forEach(arr, (e, i) -> action.accept(e)); } public static void forEach(T[] arr, BiConsumer action) { for(int i = 0; i < arr.length; i++) { action.accept(arr[i], i); } } public static O[] map(I[] arr, Function mapper, IntFunction arrayCreator) { O[] out = arrayCreator.apply(arr.length); forEach(arr, (e, i) -> out[i] = mapper.apply(e)); return out; } } public static Path getRandomFile(Path dir) throws IOException { while(dir != null && Files.isDirectory(dir)) { dir = Files.list(dir).findAny().orElse(null); } return dir; } }