/* * Roughly Enough Items by Danielshe. * Licensed under the MIT License. */ package me.shedaniel.rei.utils; import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.annotations.Internal; import java.util.*; import java.util.function.Function; import java.util.function.Predicate; @Internal public class CollectionUtils { public static final T findFirstOrNullEquals(List list, T obj) { for (T t : list) { if (t.equals(obj)) return t; } return null; } public static final T findFirstOrNull(List list, Predicate predicate) { for (T t : list) { if (predicate.test(t)) return t; } return null; } public static final boolean anyMatch(List list, Predicate predicate) { for (T t : list) { if (predicate.test(t)) return true; } return false; } public static final boolean anyMatchEqualsAll(List list, EntryStack stack) { for (EntryStack t : list) { if (t.equalsAll(stack)) return true; } return false; } public static final List filter(List list, Predicate predicate) { List l = new LinkedList<>(); for (T t : list) { if (predicate.test(t)) { l.add(t); } } return l; } public static final List map(List list, Function function) { List l = new LinkedList<>(); for (T t : list) { l.add(function.apply(t)); } return l; } public static final List map(T[] list, Function function) { List l = new LinkedList<>(); for (T t : list) { l.add(function.apply(t)); } return l; } public static final Optional mapAndMax(List list, Function function, Comparator comparator) { if (list.isEmpty()) return Optional.empty(); List copyOf = CollectionUtils.map(list, function); copyOf.sort(comparator); return Optional.ofNullable(copyOf.get(copyOf.size() - 1)); } public static final Optional mapAndMax(T[] list, Function function, Comparator comparator) { if (list.length <= 0) return Optional.empty(); List copyOf = CollectionUtils.map(list, function); copyOf.sort(comparator); return Optional.ofNullable(copyOf.get(copyOf.size() - 1)); } public static final Optional max(List list, Comparator comparator) { if (list.isEmpty()) return Optional.empty(); ArrayList ts = new ArrayList<>(list); ts.sort(comparator); return Optional.ofNullable(ts.get(ts.size() - 1)); } public static final Optional max(T[] list, Comparator comparator) { if (list.length <= 0) return Optional.empty(); T[] copyOf = list.clone(); Arrays.sort(copyOf, comparator); return Optional.ofNullable(copyOf[copyOf.length - 1]); } public static final String joinToString(List list, String separator) { StringJoiner joiner = new StringJoiner(separator); for (String t : list) { joiner.add(t); } return joiner.toString(); } public static final String joinToString(String[] list, String separator) { StringJoiner joiner = new StringJoiner(separator); for (String t : list) { joiner.add(t); } return joiner.toString(); } public static final String mapAndJoinToString(List list, Function function, String separator) { StringJoiner joiner = new StringJoiner(separator); for (T t : list) { joiner.add(function.apply(t)); } return joiner.toString(); } public static final String mapAndJoinToString(T[] list, Function function, String separator) { StringJoiner joiner = new StringJoiner(separator); for (T t : list) { joiner.add(function.apply(t)); } return joiner.toString(); } public static final List filterAndMap(List list, Predicate predicate, Function function) { List l = null; for (T t : list) { if (predicate.test(t)) { if (l == null) l = new LinkedList<>(); l.add(function.apply(t)); } } return l == null ? Collections.emptyList() : l; } public static final int sumInt(List list, Function function) { int sum = 0; for (T t : list) { sum += function.apply(t); } return sum; } public static final int sumInt(List list) { int sum = 0; for (int t : list) { sum += t; } return sum; } public static final double sumDouble(List list, Function function) { double sum = 0; for (T t : list) { sum += function.apply(t); } return sum; } public static final double sumDouble(List list) { double sum = 0; for (double t : list) { sum += t; } return sum; } }