Started Next larger patch.
- Changed: Iterable specific helper functions were moved out of Iterators and moved into Iterables - Added: New Stream replacing functions: findFirst, matchesAny/All/None
This commit is contained in:
parent
854678fd3c
commit
fc1a738625
|
@ -1,6 +1,10 @@
|
||||||
# Changelog of versions
|
# Changelog of versions
|
||||||
|
|
||||||
|
|
||||||
|
### Version 0.3.7/0.4.0
|
||||||
|
- Changed: Iterable specific helper functions were moved out of Iterators and moved into Iterables
|
||||||
|
- Added: New Stream replacing functions: findFirst, matchesAny/All/None
|
||||||
|
|
||||||
### Version 0.3.6
|
### Version 0.3.6
|
||||||
- Fixed: addAll non Type Specific Lists was causing crashes.
|
- Fixed: addAll non Type Specific Lists was causing crashes.
|
||||||
- Fixed/Changed: clearAndTrim's implementation was all over the place. In some cases causing crash scenarios.
|
- Fixed/Changed: clearAndTrim's implementation was all over the place. In some cases causing crash scenarios.
|
||||||
|
|
|
@ -176,6 +176,7 @@ public class GlobalVariables
|
||||||
addClassMapper("PRIORITY_QUEUES", "PriorityQueues");
|
addClassMapper("PRIORITY_QUEUES", "PriorityQueues");
|
||||||
addClassMapper("SPLIT_ITERATORS", "Splititerators");
|
addClassMapper("SPLIT_ITERATORS", "Splititerators");
|
||||||
addClassMapper("ITERATORS", "Iterators");
|
addClassMapper("ITERATORS", "Iterators");
|
||||||
|
addClassMapper("ITERABLES", "Iterables");
|
||||||
addBiClassMapper("MAPS", "Maps", "2");
|
addBiClassMapper("MAPS", "Maps", "2");
|
||||||
|
|
||||||
//Interfaces
|
//Interfaces
|
||||||
|
@ -195,6 +196,7 @@ public class GlobalVariables
|
||||||
addClassMapper("NAVIGABLE_SET", "NavigableSet");
|
addClassMapper("NAVIGABLE_SET", "NavigableSet");
|
||||||
addClassMapper("PRIORITY_QUEUE", "PriorityQueue");
|
addClassMapper("PRIORITY_QUEUE", "PriorityQueue");
|
||||||
addClassMapper("PRIORITY_DEQUEUE", "PriorityDequeue");
|
addClassMapper("PRIORITY_DEQUEUE", "PriorityDequeue");
|
||||||
|
addClassMapper("PREDICATE", "2BooleanFunction");
|
||||||
addClassMapper("SORTED_SET", "SortedSet");
|
addClassMapper("SORTED_SET", "SortedSet");
|
||||||
addClassMapper("SET", "Set");
|
addClassMapper("SET", "Set");
|
||||||
addClassMapper("STRATEGY", "Strategy");
|
addClassMapper("STRATEGY", "Strategy");
|
||||||
|
|
|
@ -7,8 +7,9 @@ import java.util.function.Consumer;
|
||||||
import speiger.src.collections.PACKAGE.functions.CONSUMER;
|
import speiger.src.collections.PACKAGE.functions.CONSUMER;
|
||||||
#else
|
#else
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import speiger.src.collections.PACKAGE.utils.ITERATORS;
|
import speiger.src.collections.PACKAGE.utils.ITERABLES;
|
||||||
#endif
|
#endif
|
||||||
|
import speiger.src.collections.PACKAGE.functions.function.PREDICATE;
|
||||||
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
||||||
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
||||||
|
|
||||||
|
@ -72,7 +73,7 @@ public interface ITERABLE KEY_GENERIC_TYPE extends Iterable<CLASS_TYPE>
|
||||||
* @return a new Iterable that returns the desired result
|
* @return a new Iterable that returns the desired result
|
||||||
*/
|
*/
|
||||||
public default <E> ObjectIterable<E> map(Function<T, E> map) {
|
public default <E> ObjectIterable<E> map(Function<T, E> map) {
|
||||||
return ObjectIterators.map(this, map);
|
return ObjectIterables.map(this, map);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -83,7 +84,7 @@ public interface ITERABLE KEY_GENERIC_TYPE extends Iterable<CLASS_TYPE>
|
||||||
* @return a new Iterable that returns the desired result
|
* @return a new Iterable that returns the desired result
|
||||||
*/
|
*/
|
||||||
public default <E, V extends Iterable<E>> ObjectIterable<E> flatMap(Function<T, V> map) {
|
public default <E, V extends Iterable<E>> ObjectIterable<E> flatMap(Function<T, V> map) {
|
||||||
return ObjectIterators.flatMap(this, map);
|
return ObjectIterables.flatMap(this, map);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -93,8 +94,72 @@ public interface ITERABLE KEY_GENERIC_TYPE extends Iterable<CLASS_TYPE>
|
||||||
* @return a new Iterable that returns the desired result
|
* @return a new Iterable that returns the desired result
|
||||||
*/
|
*/
|
||||||
public default <E> ObjectIterable<E> arrayflatMap(Function<T, E[]> map) {
|
public default <E> ObjectIterable<E> arrayflatMap(Function<T, E[]> map) {
|
||||||
return ObjectIterators.arrayFlatMap(this, map);
|
return ObjectIterables.arrayFlatMap(this, map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
/**
|
||||||
|
* Helper function to reduce stream usage that allows to filter for any matches.
|
||||||
|
* @param filter that should be applied
|
||||||
|
* @return true if any matches were found
|
||||||
|
*/
|
||||||
|
public default boolean matchesAny(PREDICATE KEY_GENERIC_TYPE filter) {
|
||||||
|
for(ITERATOR KEY_GENERIC_TYPE iter = iterator();iter.hasNext();) {
|
||||||
|
#if TYPE_OBJECT
|
||||||
|
if(filter.getBoolean(iter.NEXT())) return true;
|
||||||
|
#else
|
||||||
|
if(filter.GET_VALUE(iter.NEXT())) return true;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to reduce stream usage that allows to filter for no matches.
|
||||||
|
* @param filter that should be applied
|
||||||
|
* @return true if no matches were found
|
||||||
|
*/
|
||||||
|
public default boolean matchesNone(PREDICATE KEY_GENERIC_TYPE filter) {
|
||||||
|
for(ITERATOR KEY_GENERIC_TYPE iter = iterator();iter.hasNext();) {
|
||||||
|
#if TYPE_OBJECT
|
||||||
|
if(filter.getBoolean(iter.NEXT())) return false;
|
||||||
|
#else
|
||||||
|
if(filter.GET_VALUE(iter.NEXT())) return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to reduce stream usage that allows to filter for all matches.
|
||||||
|
* @param filter that should be applied
|
||||||
|
* @return true if all matches.
|
||||||
|
*/
|
||||||
|
public default boolean matchesAll(PREDICATE KEY_GENERIC_TYPE filter) {
|
||||||
|
for(ITERATOR KEY_GENERIC_TYPE iter = iterator();iter.hasNext();) {
|
||||||
|
#if TYPE_OBJECT
|
||||||
|
if(!filter.getBoolean(iter.NEXT())) return false;
|
||||||
|
#else
|
||||||
|
if(!filter.GET_VALUE(iter.NEXT())) return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to reduce stream usage that allows to filter for the first match.
|
||||||
|
* @param filter that should be applied
|
||||||
|
* @return the found value or the null equivalent variant.
|
||||||
|
*/
|
||||||
|
public default KEY_TYPE findFirst(PREDICATE KEY_GENERIC_TYPE filter) {
|
||||||
|
for(ITERATOR KEY_GENERIC_TYPE iter = iterator();iter.hasNext();) {
|
||||||
|
KEY_TYPE entry = iter.NEXT();
|
||||||
|
#if TYPE_OBJECT
|
||||||
|
if(filter.getBoolean(entry)) return entry;
|
||||||
|
#else
|
||||||
|
if(filter.GET_VALUE(entry)) return entry;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return EMPTY_VALUE;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
package speiger.src.collections.PACKAGE.utils;
|
||||||
|
|
||||||
|
#if TYPE_OBJECT
|
||||||
|
import java.util.function.Function;
|
||||||
|
import speiger.src.collections.PACKAGE.collections.ITERABLE;
|
||||||
|
import speiger.src.collections.PACKAGE.collections.ITERATOR;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Helper class for Iterables
|
||||||
|
*/
|
||||||
|
public class ITERABLES
|
||||||
|
{
|
||||||
|
#if TYPE_OBJECT
|
||||||
|
/**
|
||||||
|
* A Helper function that maps a Iterable into a new Type.
|
||||||
|
* @param iterable the iterable that should be mapped
|
||||||
|
* @param mapper the function that decides what the result turns into.
|
||||||
|
* @Type(T)
|
||||||
|
* @Type(E)
|
||||||
|
* @return a iterable that is mapped to a new result
|
||||||
|
*/
|
||||||
|
public static <T, E> ITERABLE<T> map(ITERABLE<E> iterable, Function<E, T> mapper) {
|
||||||
|
return new MappedIterableBRACES(iterable, mapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Helper function that flatMaps a Iterable into a new Type.
|
||||||
|
* @param iterable the iterable that should be flatMapped
|
||||||
|
* @param mapper the function that decides what the result turns into.
|
||||||
|
* @Type(T)
|
||||||
|
* @Type(V)
|
||||||
|
* @Type(E)
|
||||||
|
* @return a iterable that is flatMapped to a new result
|
||||||
|
*/
|
||||||
|
public static <T, E, V extends Iterable<T>> ITERABLE<T> flatMap(ITERABLE<E> iterable, Function<E, V> mapper) {
|
||||||
|
return new FlatMappedIterableBRACES(iterable, mapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Helper function that flatMaps a Iterable into a new Type.
|
||||||
|
* @param iterable the iterable that should be flatMapped
|
||||||
|
* @param mapper the function that decides what the result turns into.
|
||||||
|
* @Type(T)
|
||||||
|
* @Type(E)
|
||||||
|
* @return a iterable that is flatMapped to a new result
|
||||||
|
*/
|
||||||
|
public static <T, E> ITERABLE<T> arrayFlatMap(ITERABLE<E> iterable, Function<E, T[]> mapper) {
|
||||||
|
return new FlatMappedArrayIterableBRACES(iterable, mapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class MappedIterable<E, T> implements ITERABLE<T>
|
||||||
|
{
|
||||||
|
ITERABLE<E> iterable;
|
||||||
|
Function<E, T> mapper;
|
||||||
|
|
||||||
|
MappedIterable(ITERABLE<E> iterable, Function<E, T> mapper) {
|
||||||
|
this.iterable = iterable;
|
||||||
|
this.mapper = mapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ITERATOR<T> iterator() {
|
||||||
|
return ITERATORS.map(iterable.iterator(), mapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class FlatMappedIterable<E, T, V extends Iterable<T>> implements ITERABLE<T>
|
||||||
|
{
|
||||||
|
ITERABLE<E> iterable;
|
||||||
|
Function<E, V> mapper;
|
||||||
|
|
||||||
|
FlatMappedIterable(ITERABLE<E> iterable, Function<E, V> mapper) {
|
||||||
|
this.iterable = iterable;
|
||||||
|
this.mapper = mapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ITERATOR<T> iterator() {
|
||||||
|
return ITERATORS.flatMap(iterable.iterator(), mapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class FlatMappedArrayIterable<E, T> implements ITERABLE<T>
|
||||||
|
{
|
||||||
|
ITERABLE<E> iterable;
|
||||||
|
Function<E, T[]> mapper;
|
||||||
|
|
||||||
|
FlatMappedArrayIterable(ITERABLE<E> iterable, Function<E, T[]> mapper) {
|
||||||
|
this.iterable = iterable;
|
||||||
|
this.mapper = mapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ITERATOR<T> iterator() {
|
||||||
|
return ITERATORS.arrayFlatMap(iterable.iterator(), mapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
|
@ -12,9 +12,6 @@ import speiger.src.collections.PACKAGE.lists.LIST;
|
||||||
import speiger.src.collections.PACKAGE.lists.LIST_ITERATOR;
|
import speiger.src.collections.PACKAGE.lists.LIST_ITERATOR;
|
||||||
import speiger.src.collections.PACKAGE.collections.BI_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.BI_ITERATOR;
|
||||||
import speiger.src.collections.PACKAGE.collections.COLLECTION;
|
import speiger.src.collections.PACKAGE.collections.COLLECTION;
|
||||||
#if TYPE_OBJECT
|
|
||||||
import speiger.src.collections.PACKAGE.collections.ITERABLE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Helper class for Iterators
|
* A Helper class for Iterators
|
||||||
|
@ -90,18 +87,6 @@ public class ITERATORS
|
||||||
}
|
}
|
||||||
|
|
||||||
#if TYPE_OBJECT
|
#if TYPE_OBJECT
|
||||||
/**
|
|
||||||
* A Helper function that maps a Iterable into a new Type.
|
|
||||||
* @param iterable the iterable that should be mapped
|
|
||||||
* @param mapper the function that decides what the result turns into.
|
|
||||||
* @Type(T)
|
|
||||||
* @Type(E)
|
|
||||||
* @return a iterable that is mapped to a new result
|
|
||||||
*/
|
|
||||||
public static <T, E> ITERABLE<T> map(ITERABLE<E> iterable, Function<E, T> mapper) {
|
|
||||||
return new MappedIterableBRACES(iterable, mapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Helper function that maps a Iterator into a new Type.
|
* A Helper function that maps a Iterator into a new Type.
|
||||||
* @param iterator that should be mapped
|
* @param iterator that should be mapped
|
||||||
|
@ -114,31 +99,6 @@ public class ITERATORS
|
||||||
return new MappedIteratorBRACES(iterator, mapper);
|
return new MappedIteratorBRACES(iterator, mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A Helper function that flatMaps a Iterable into a new Type.
|
|
||||||
* @param iterable the iterable that should be flatMapped
|
|
||||||
* @param mapper the function that decides what the result turns into.
|
|
||||||
* @Type(T)
|
|
||||||
* @Type(V)
|
|
||||||
* @Type(E)
|
|
||||||
* @return a iterable that is flatMapped to a new result
|
|
||||||
*/
|
|
||||||
public static <T, E, V extends Iterable<T>> ITERABLE<T> flatMap(ITERABLE<E> iterable, Function<E, V> mapper) {
|
|
||||||
return new FlatMappedIterableBRACES(iterable, mapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A Helper function that flatMaps a Iterable into a new Type.
|
|
||||||
* @param iterable the iterable that should be flatMapped
|
|
||||||
* @param mapper the function that decides what the result turns into.
|
|
||||||
* @Type(T)
|
|
||||||
* @Type(E)
|
|
||||||
* @return a iterable that is flatMapped to a new result
|
|
||||||
*/
|
|
||||||
public static <T, E> ITERABLE<T> arrayFlatMap(ITERABLE<E> iterable, Function<E, T[]> mapper) {
|
|
||||||
return new FlatMappedArrayIterableBRACES(iterable, mapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Helper function that flatMaps a Iterator into a new Type.
|
* A Helper function that flatMaps a Iterator into a new Type.
|
||||||
* @param iterator that should be flatMapped
|
* @param iterator that should be flatMapped
|
||||||
|
@ -682,21 +642,6 @@ public class ITERATORS
|
||||||
}
|
}
|
||||||
|
|
||||||
#if TYPE_OBJECT
|
#if TYPE_OBJECT
|
||||||
private static class MappedIterable<E, T> implements ITERABLE<T>
|
|
||||||
{
|
|
||||||
ITERABLE<E> iterable;
|
|
||||||
Function<E, T> mapper;
|
|
||||||
|
|
||||||
MappedIterable(ITERABLE<E> iterable, Function<E, T> mapper) {
|
|
||||||
this.iterable = iterable;
|
|
||||||
this.mapper = mapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ITERATOR<T> iterator() {
|
|
||||||
return new MappedIterator<>(iterable.iterator(), mapper);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class MappedIterator<E, T> implements ITERATOR<T>
|
private static class MappedIterator<E, T> implements ITERATOR<T>
|
||||||
{
|
{
|
||||||
ITERATOR<E> iterator;
|
ITERATOR<E> iterator;
|
||||||
|
@ -723,38 +668,6 @@ public class ITERATORS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class FlatMappedIterable<E, T, V extends Iterable<T>> implements ITERABLE<T>
|
|
||||||
{
|
|
||||||
ITERABLE<E> iterable;
|
|
||||||
Function<E, V> mapper;
|
|
||||||
|
|
||||||
FlatMappedIterable(ITERABLE<E> iterable, Function<E, V> mapper) {
|
|
||||||
this.iterable = iterable;
|
|
||||||
this.mapper = mapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ITERATOR<T> iterator() {
|
|
||||||
return new FlatMappedIterator<>(iterable.iterator(), mapper);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class FlatMappedArrayIterable<E, T> implements ITERABLE<T>
|
|
||||||
{
|
|
||||||
ITERABLE<E> iterable;
|
|
||||||
Function<E, T[]> mapper;
|
|
||||||
|
|
||||||
FlatMappedArrayIterable(ITERABLE<E> iterable, Function<E, T[]> mapper) {
|
|
||||||
this.iterable = iterable;
|
|
||||||
this.mapper = mapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ITERATOR<T> iterator() {
|
|
||||||
return new FlatMappedArrayIterator<>(iterable.iterator(), mapper);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class FlatMappedIterator<E, T, V extends Iterable<T>> implements ITERATOR<T>
|
private static class FlatMappedIterator<E, T, V extends Iterable<T>> implements ITERATOR<T>
|
||||||
{
|
{
|
||||||
ITERATOR<E> iterator;
|
ITERATOR<E> iterator;
|
||||||
|
|
Loading…
Reference in New Issue