New Features.
-Added: Suppliers. -Added: ComputeIfAbsent but value generator is a supplier
This commit is contained in:
		
							parent
							
								
									49c5e9eadd
								
							
						
					
					
						commit
						531443531d
					
				@ -1,9 +1,11 @@
 | 
				
			|||||||
# Changelog of versions
 | 
					# Changelog of versions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
###Version 0.4.1
 | 
					### Version 0.4.1
 | 
				
			||||||
- Changed: ForEach with input now provides input, value instead of value, input, this improves the usage of method references greatly
 | 
					- Changed: ForEach with input now provides input, value instead of value, input, this improves the usage of method references greatly
 | 
				
			||||||
- Added: addAll with Array-types in collections.
 | 
					- Added: addAll with Array-types in collections.
 | 
				
			||||||
- Added: Java Iterator/Iterable support for Stream replacing methods
 | 
					- Added: Java Iterator/Iterable support for Stream replacing methods
 | 
				
			||||||
 | 
					- Added: Suppliers.
 | 
				
			||||||
 | 
					- Added: ComputeIfAbsent but value generator is a supplier
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Version 0.4.0
 | 
					### Version 0.4.0
 | 
				
			||||||
- Changed: Iterable specific helper functions were moved out of Iterators and moved into Iterables
 | 
					- Changed: Iterable specific helper functions were moved out of Iterators and moved into Iterables
 | 
				
			||||||
 | 
				
			|||||||
@ -15,6 +15,9 @@ But its focus is a different one.
 | 
				
			|||||||
- SplitIterators
 | 
					- SplitIterators
 | 
				
			||||||
- Iterators
 | 
					- Iterators
 | 
				
			||||||
- Pairs
 | 
					- Pairs
 | 
				
			||||||
 | 
					- Unary/Functions
 | 
				
			||||||
 | 
					- Suppliers
 | 
				
			||||||
 | 
					- Bi/Consumers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Specialized Functions
 | 
					## Specialized Functions
 | 
				
			||||||
New Specialized functions that were added to increase performance or reduce allocations or Quality Of life.
 | 
					New Specialized functions that were added to increase performance or reduce allocations or Quality Of life.
 | 
				
			||||||
@ -43,6 +46,7 @@ To highlight things that may be wanted.
 | 
				
			|||||||
	- addToAll: Same as addTo but bulkVersion.
 | 
						- addToAll: Same as addTo but bulkVersion.
 | 
				
			||||||
	- removeOrDefault: removes a Element and if not present returns the default value instead of the present value.
 | 
						- removeOrDefault: removes a Element and if not present returns the default value instead of the present value.
 | 
				
			||||||
	- mergeAll: BulkVersion of Merge function.
 | 
						- mergeAll: BulkVersion of Merge function.
 | 
				
			||||||
 | 
						- computeIfAbsent: A Supplier based generator that covers a lot more reference method cases
 | 
				
			||||||
- Sorted Map:
 | 
					- Sorted Map:
 | 
				
			||||||
	- addAndMoveToFirst/Last (From FastUtil but moved to Interface): Allows to add a element to the first/last position of a sorted Map.
 | 
						- addAndMoveToFirst/Last (From FastUtil but moved to Interface): Allows to add a element to the first/last position of a sorted Map.
 | 
				
			||||||
	- moveToFirst/Last: Moves the desired element at the first/last position of the Map.
 | 
						- moveToFirst/Last: Moves the desired element at the first/last position of the Map.
 | 
				
			||||||
 | 
				
			|||||||
@ -147,6 +147,7 @@ public class GlobalVariables
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		addSimpleMapper("JAVA_PREDICATE", type.isPrimitiveBlocking() ? "" : type.getCustomJDKType().getFileType()+"Predicate");
 | 
							addSimpleMapper("JAVA_PREDICATE", type.isPrimitiveBlocking() ? "" : type.getCustomJDKType().getFileType()+"Predicate");
 | 
				
			||||||
		addSimpleMapper("JAVA_CONSUMER", type.isPrimitiveBlocking() ? "" : "java.util.function."+type.getCustomJDKType().getFileType()+"Consumer");
 | 
							addSimpleMapper("JAVA_CONSUMER", type.isPrimitiveBlocking() ? "" : "java.util.function."+type.getCustomJDKType().getFileType()+"Consumer");
 | 
				
			||||||
 | 
							addSimpleMapper("JAVA_SUPPLIER", type.isPrimitiveBlocking() ? "" : "java.util.function."+type.getCustomJDKType().getFileType()+"Supplier");
 | 
				
			||||||
		addSimpleMapper("JAVA_FUNCTION", type.getFunctionClass(valueType));
 | 
							addSimpleMapper("JAVA_FUNCTION", type.getFunctionClass(valueType));
 | 
				
			||||||
		addSimpleMapper("JAVA_BINARY_OPERATOR", type == ClassType.BOOLEAN ? "" : (type.isObject() ? "java.util.function.BinaryOperator" : "java.util.function."+type.getCustomJDKType().getFileType()+"BinaryOperator"));
 | 
							addSimpleMapper("JAVA_BINARY_OPERATOR", type == ClassType.BOOLEAN ? "" : (type.isObject() ? "java.util.function.BinaryOperator" : "java.util.function."+type.getCustomJDKType().getFileType()+"BinaryOperator"));
 | 
				
			||||||
		addSimpleMapper("JAVA_UNARY_OPERATOR", type.isObject() ? "BinaryOperator" : type == ClassType.BOOLEAN ? "" : type.getCustomJDKType().getFileType()+"UnaryOperator");
 | 
							addSimpleMapper("JAVA_UNARY_OPERATOR", type.isObject() ? "BinaryOperator" : type == ClassType.BOOLEAN ? "" : type.getCustomJDKType().getFileType()+"UnaryOperator");
 | 
				
			||||||
@ -225,6 +226,7 @@ public class GlobalVariables
 | 
				
			|||||||
		addClassMapper("SET", "Set");
 | 
							addClassMapper("SET", "Set");
 | 
				
			||||||
		addClassMapper("STRATEGY", "Strategy");
 | 
							addClassMapper("STRATEGY", "Strategy");
 | 
				
			||||||
		addClassMapper("STACK", "Stack");
 | 
							addClassMapper("STACK", "Stack");
 | 
				
			||||||
 | 
							addClassMapper("SUPPLIER", "Supplier");
 | 
				
			||||||
		addBiClassMapper("UNARY_OPERATOR", "UnaryOperator", "");
 | 
							addBiClassMapper("UNARY_OPERATOR", "UnaryOperator", "");
 | 
				
			||||||
		if(type.isObject())
 | 
							if(type.isObject())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@ -275,6 +277,7 @@ public class GlobalVariables
 | 
				
			|||||||
		addFunctionMapper("GET_KEY", "get");
 | 
							addFunctionMapper("GET_KEY", "get");
 | 
				
			||||||
		if(type.isObject()) addFunctionValueMapper("GET_VALUE", valueType.isObject() ? "getObject" : "get");
 | 
							if(type.isObject()) addFunctionValueMapper("GET_VALUE", valueType.isObject() ? "getObject" : "get");
 | 
				
			||||||
		else addSimpleMapper("GET_VALUE", "get");
 | 
							else addSimpleMapper("GET_VALUE", "get");
 | 
				
			||||||
 | 
							addSimpleMapper("GET_JAVA", type.isObject() ? "get" : "getAs"+type.getCustomJDKType().getNonFileType());
 | 
				
			||||||
		addFunctionMapper("LAST_KEY", "last");
 | 
							addFunctionMapper("LAST_KEY", "last");
 | 
				
			||||||
		addFunctionValueMapper("MERGE", "merge");
 | 
							addFunctionValueMapper("MERGE", "merge");
 | 
				
			||||||
		addFunctionMapper("NEXT", "next");
 | 
							addFunctionMapper("NEXT", "next");
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					package speiger.src.collections.PACKAGE.functions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Type-Specific Supplier interface that reduces (un)boxing and allows to merge other consumer types into this interface
 | 
				
			||||||
 | 
					 * @Type(T)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
					public interface SUPPLIER KEY_GENERIC_TYPE extends java.util.function.Supplier<KEY_TYPE>
 | 
				
			||||||
 | 
					#else if JDK_TYPE && !TYPE_BOOLEAN
 | 
				
			||||||
 | 
					public interface SUPPLIER KEY_GENERIC_TYPE extends JAVA_SUPPLIER
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					public interface SUPPLIER KEY_GENERIC_TYPE
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the supplied value
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public KEY_TYPE GET_KEY();
 | 
				
			||||||
 | 
					#if JDK_TYPE && PRIMITIVE
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public default KEY_TYPE GET_JAVA() {
 | 
				
			||||||
 | 
							return GET_KEY();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -18,6 +18,7 @@ import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
				
			|||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ITERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ITERATOR;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.VALUE_SUPPLIER;
 | 
				
			||||||
#if !TYPE_OBJECT && !VALUE_OBJECT
 | 
					#if !TYPE_OBJECT && !VALUE_OBJECT
 | 
				
			||||||
import speiger.src.collections.objects.collections.ObjectIterator;
 | 
					import speiger.src.collections.objects.collections.ObjectIterator;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -189,6 +190,20 @@ public abstract class ABSTRACT_MAP KEY_VALUE_GENERIC_TYPE extends AbstractMap<CL
 | 
				
			|||||||
		return value;
 | 
							return value;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) {
 | 
				
			||||||
 | 
							Objects.requireNonNull(valueProvider);
 | 
				
			||||||
 | 
							VALUE_TYPE value;
 | 
				
			||||||
 | 
							if((value = GET_VALUE(key)) == getDefaultReturnValue() || !containsKey(key)) {
 | 
				
			||||||
 | 
								VALUE_TYPE newValue = valueProvider.VALUE_GET_KEY();
 | 
				
			||||||
 | 
								if(VALUE_EQUALS_NOT(newValue, getDefaultReturnValue())) {
 | 
				
			||||||
 | 
									put(key, newValue);
 | 
				
			||||||
 | 
									return newValue;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return value;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
						public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
				
			||||||
		Objects.requireNonNull(mappingFunction);
 | 
							Objects.requireNonNull(mappingFunction);
 | 
				
			||||||
 | 
				
			|||||||
@ -29,6 +29,7 @@ import speiger.src.collections.PACKAGE.sets.SET;
 | 
				
			|||||||
import speiger.src.collections.PACKAGE.utils.STRATEGY;
 | 
					import speiger.src.collections.PACKAGE.utils.STRATEGY;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
				
			||||||
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.VALUE_SUPPLIER;
 | 
				
			||||||
#if !SAME_TYPE
 | 
					#if !SAME_TYPE
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
				
			||||||
#if !VALUE_OBJECT
 | 
					#if !VALUE_OBJECT
 | 
				
			||||||
@ -496,6 +497,18 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL
 | 
				
			|||||||
		return values[index];
 | 
							return values[index];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) {
 | 
				
			||||||
 | 
							int index = findIndex(key);
 | 
				
			||||||
 | 
							if(index < 0) {
 | 
				
			||||||
 | 
								VALUE_TYPE newValue = valueProvider.VALUE_GET_KEY();
 | 
				
			||||||
 | 
								if(VALUE_EQUALS(newValue, getDefaultReturnValue())) return newValue;
 | 
				
			||||||
 | 
								insert(-index-1, key, newValue);
 | 
				
			||||||
 | 
								return newValue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return values[index];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
						public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
				
			||||||
		int index = findIndex(key);
 | 
							int index = findIndex(key);
 | 
				
			||||||
 | 
				
			|||||||
@ -28,6 +28,7 @@ import speiger.src.collections.PACKAGE.sets.SET;
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
				
			||||||
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.VALUE_SUPPLIER;
 | 
				
			||||||
#if !SAME_TYPE
 | 
					#if !SAME_TYPE
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -457,6 +458,18 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE
 | 
				
			|||||||
		return values[index];
 | 
							return values[index];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) {
 | 
				
			||||||
 | 
							int index = findIndex(key);
 | 
				
			||||||
 | 
							if(index < 0) {
 | 
				
			||||||
 | 
								VALUE_TYPE newValue = valueProvider.VALUE_GET_KEY();
 | 
				
			||||||
 | 
								if(VALUE_EQUALS(newValue, getDefaultReturnValue())) return newValue;
 | 
				
			||||||
 | 
								insert(-index-1, key, newValue);
 | 
				
			||||||
 | 
								return newValue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return values[index];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
						public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
				
			||||||
		int index = findIndex(key);
 | 
							int index = findIndex(key);
 | 
				
			||||||
 | 
				
			|||||||
@ -49,6 +49,7 @@ import speiger.src.collections.PACKAGE.sets.SET;
 | 
				
			|||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ITERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ITERATOR;
 | 
				
			||||||
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.VALUE_SUPPLIER;
 | 
				
			||||||
#if !SAME_TYPE
 | 
					#if !SAME_TYPE
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
				
			||||||
#if !VALUE_OBJECT
 | 
					#if !VALUE_OBJECT
 | 
				
			||||||
@ -441,6 +442,9 @@ public class IMMUTABLE_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); }
 | 
						public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); }
 | 
						public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
				
			|||||||
@ -30,6 +30,7 @@ import speiger.src.collections.PACKAGE.utils.maps.MAPS;
 | 
				
			|||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ITERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ITERATOR;
 | 
				
			||||||
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.VALUE_SUPPLIER;
 | 
				
			||||||
#if !SAME_TYPE
 | 
					#if !SAME_TYPE
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
				
			||||||
#if !VALUE_OBJECT
 | 
					#if !VALUE_OBJECT
 | 
				
			||||||
@ -487,6 +488,18 @@ public class ARRAY_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GEN
 | 
				
			|||||||
		return values[index];
 | 
							return values[index];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) {
 | 
				
			||||||
 | 
							int index = findIndex(key);
 | 
				
			||||||
 | 
							if(index == -1) {
 | 
				
			||||||
 | 
								VALUE_TYPE newValue = valueProvider.VALUE_GET_KEY();
 | 
				
			||||||
 | 
								if(VALUE_EQUALS(newValue, getDefaultReturnValue())) return newValue;
 | 
				
			||||||
 | 
								insertIndex(size++, key, newValue);
 | 
				
			||||||
 | 
								return newValue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return values[index];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
						public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
				
			||||||
		int index = findIndex(key);
 | 
							int index = findIndex(key);
 | 
				
			||||||
 | 
				
			|||||||
@ -33,6 +33,7 @@ import speiger.src.collections.PACKAGE.utils.maps.MAPS;
 | 
				
			|||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ITERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ITERATOR;
 | 
				
			||||||
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.VALUE_SUPPLIER;
 | 
				
			||||||
#if !SAME_TYPE
 | 
					#if !SAME_TYPE
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.lists.VALUE_LIST_ITERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.lists.VALUE_LIST_ITERATOR;
 | 
				
			||||||
@ -529,6 +530,18 @@ public class AVL_TREE_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_
 | 
				
			|||||||
		return entry.value;
 | 
							return entry.value;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) {
 | 
				
			||||||
 | 
							Entry KEY_VALUE_GENERIC_TYPE entry = findNode(key);
 | 
				
			||||||
 | 
							if(entry == null) {
 | 
				
			||||||
 | 
								VALUE_TYPE newValue = valueProvider.VALUE_GET_KEY();
 | 
				
			||||||
 | 
								if(VALUE_EQUALS(newValue, getDefaultReturnValue())) return newValue;
 | 
				
			||||||
 | 
								put(key, newValue);
 | 
				
			||||||
 | 
								return newValue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return entry.value;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
						public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
				
			||||||
		Entry KEY_VALUE_GENERIC_TYPE entry = findNode(key);
 | 
							Entry KEY_VALUE_GENERIC_TYPE entry = findNode(key);
 | 
				
			||||||
 | 
				
			|||||||
@ -33,6 +33,7 @@ import speiger.src.collections.PACKAGE.utils.maps.MAPS;
 | 
				
			|||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ABSTRACT_COLLECTION;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_COLLECTION;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ITERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.collections.VALUE_ITERATOR;
 | 
				
			||||||
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.VALUE_SUPPLIER;
 | 
				
			||||||
#if !SAME_TYPE
 | 
					#if !SAME_TYPE
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.lists.VALUE_LIST_ITERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.lists.VALUE_LIST_ITERATOR;
 | 
				
			||||||
@ -528,6 +529,18 @@ public class RB_TREE_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_G
 | 
				
			|||||||
		return entry.value;
 | 
							return entry.value;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider) {
 | 
				
			||||||
 | 
							Entry KEY_VALUE_GENERIC_TYPE entry = findNode(key);
 | 
				
			||||||
 | 
							if(entry == null) {
 | 
				
			||||||
 | 
								VALUE_TYPE newValue = valueProvider.VALUE_GET_KEY();
 | 
				
			||||||
 | 
								if(VALUE_EQUALS(newValue, getDefaultReturnValue())) return newValue;
 | 
				
			||||||
 | 
								put(key, newValue);
 | 
				
			||||||
 | 
								return newValue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return entry.value;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
						public VALUE_TYPE COMPUTE_IF_PRESENT(KEY_TYPE key, UNARY_OPERATOR KEY_VALUE_GENERIC_TYPE mappingFunction) {
 | 
				
			||||||
		Entry KEY_VALUE_GENERIC_TYPE entry = findNode(key);
 | 
							Entry KEY_VALUE_GENERIC_TYPE entry = findNode(key);
 | 
				
			||||||
 | 
				
			|||||||
@ -33,6 +33,7 @@ import speiger.src.collections.PACKAGE.sets.SET;
 | 
				
			|||||||
#if !SAME_TYPE
 | 
					#if !SAME_TYPE
 | 
				
			||||||
import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.function.VALUE_UNARY_OPERATOR;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					import speiger.src.collections.VALUE_PACKAGE.functions.VALUE_SUPPLIER;
 | 
				
			||||||
import speiger.src.collections.objects.collections.ObjectIterator;
 | 
					import speiger.src.collections.objects.collections.ObjectIterator;
 | 
				
			||||||
#if !TYPE_OBJECT
 | 
					#if !TYPE_OBJECT
 | 
				
			||||||
import speiger.src.collections.objects.sets.ObjectSet;
 | 
					import speiger.src.collections.objects.sets.ObjectSet;
 | 
				
			||||||
@ -267,6 +268,14 @@ public interface MAP KEY_VALUE_GENERIC_TYPE extends Map<CLASS_TYPE, CLASS_VALUE_
 | 
				
			|||||||
	 * @return the result of the computed value or present value
 | 
						 * @return the result of the computed value or present value
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction);
 | 
						public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, FUNCTION KEY_VALUE_GENERIC_TYPE mappingFunction);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * A Supplier based computeIfAbsent function to fill the most used usecase of this function
 | 
				
			||||||
 | 
						 * @param key the key that should be computed
 | 
				
			||||||
 | 
						 * @param valueProvider the value if not present
 | 
				
			||||||
 | 
						 * @return the result of the computed value or present value
 | 
				
			||||||
 | 
						 */	
 | 
				
			||||||
 | 
						public VALUE_TYPE COMPUTE_IF_ABSENT(KEY_TYPE key, VALUE_SUPPLIER VALUE_GENERIC_TYPE valueProvider);
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * A Type Specific compute method to reduce boxing/unboxing
 | 
						 * A Type Specific compute method to reduce boxing/unboxing
 | 
				
			||||||
	 * @param key the key that should be computed
 | 
						 * @param key the key that should be computed
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user