diff options
Diffstat (limited to 'src/main/java/gregtech/api/util/extensions')
-rw-r--r-- | src/main/java/gregtech/api/util/extensions/ArrayExt.java | 31 | ||||
-rw-r--r-- | src/main/java/gregtech/api/util/extensions/IteratorExt.java | 12 |
2 files changed, 38 insertions, 5 deletions
diff --git a/src/main/java/gregtech/api/util/extensions/ArrayExt.java b/src/main/java/gregtech/api/util/extensions/ArrayExt.java index faa01cb368..51486bc036 100644 --- a/src/main/java/gregtech/api/util/extensions/ArrayExt.java +++ b/src/main/java/gregtech/api/util/extensions/ArrayExt.java @@ -32,15 +32,36 @@ public class ArrayExt { return objects; } + @SuppressWarnings("ForLoopReplaceableByForEach") + public static <T> T[] withoutNulls(T[] array, IntFunction<T[]> arrayFactory) { + int count = 0; + for (int i = 0; i < array.length; i++) { + if (array[i] != null) { + count++; + } + } + + T[] newArr = arrayFactory.apply(count); + if (count == 0) return newArr; + + int j = 0; + for (int i = 0; i < array.length; i++) { + if (array[i] != null) { + newArr[j] = array[i]; + j++; + } + } + + return newArr; + } + public static <T> T[] withoutTrailingNulls(T[] array, IntFunction<T[]> arrayFactory) { int firstNull = -1; - for (int i = 0; i < array.length; i++) { + for (int i = array.length - 1; i >= 0; i--) { if (array[i] == null) { - if (firstNull == -1) { - firstNull = i; - } + firstNull = i; } else { - firstNull = -1; + break; } } diff --git a/src/main/java/gregtech/api/util/extensions/IteratorExt.java b/src/main/java/gregtech/api/util/extensions/IteratorExt.java new file mode 100644 index 0000000000..d59bb298a4 --- /dev/null +++ b/src/main/java/gregtech/api/util/extensions/IteratorExt.java @@ -0,0 +1,12 @@ +package gregtech.api.util.extensions; + +import gregtech.api.objects.iterators.MergedIterator; + +import java.util.Iterator; + +public class IteratorExt { + @SafeVarargs + public static <T> Iterator<T> merge(Iterator<T>... iterators) { + return new MergedIterator<>(iterators); + } +} |