Enchanted collection toolkit
A collection of useful data structures and algorithms for collections.
🗂️ Summary
List util's
For each mapper
A for each function with aditional info in each interation. Such as:
- Is the first interation?
isFirst
- Is the last interation?
isLast
- The index of the current interation
index
- The value of the current interation
value
final forEachMapperExample = [1, 2, 3];
forEachMapperExample.forEachMapper((value, isFirst, isLast, index) {
print('value: $value');
print('isFirst: $isFirst');
print('isLast: $isLast');
print('index: $index');
});
Mapper
A map function with aditional info in each interation.
Such as:
- Is the first interation?
isFirst
- Is the last interation?
isLast
- The index of the current interation
index
- The value of the current interation
value
Returns a list of the mapped values.
final mapperExample = ['igor', 'miranda', 'souza'];
final List<Map<int, String>> mappedList = mapperExample.mapper((
value,
isFirst,
isLast,
index,
) {
if (isFirst || isLast) {
return {index: value.toUpperCase()};
}
return {index: value};
});
print(mappedList); // [{0: "IGOR"}, {1: "miranda"}, {2: "SOUZA"}]
Single where or null
Equal to singleWhere
but will not throw a error if element dosen't exist's. But will return null
instead.
final List<int> singleWhereOrNullList = [1, 2, 3];
// Will return null:
print(singleWhereOrNullList.singleWhereOrNull((e) => e == 4));
// Will return 3:
print(singleWhereOrNullList.singleWhereOrNull((e) => e == 3));
Insert in index
Will add newValue
in the list in the position of index
.
Equal to List.insert function. But will return the list itself with the added value. So you can cascade it.
final insertInIndexExample = [1, 2, 4];
insertInIndexExample.insertInIndex(1, 3);
print(insertInIndexExample); // [1, 2, 3, 4]
Change element in index
Will change the value in the index
position to newValue
.
final changeListExample = [1, 2, 3];
changeListExample // cascade notation
.changeAtIndexTo(0, 4)
.changeAtIndexTo(1, 5)
.changeAtIndexTo(2, 6);
print(changeListExample); // [4, 5, 6]
Add value as last element of list
Will add newValue
in the last position of the list.
Equal to List.add function. But will return the list itself with the added value. So you can cascade it.
final addInLastExample = [1, 2, 3];
addInLastExample // cascade notation
.addInLast(4)
.addInLast(5)
.addInLast(6);
print(addInLastExample); // [1, 2, 3, 4, 5, 6]
Split into groups
Will split the list into groups of quantityPerGroup
elements.
The last group may have less elements than quantityPerGroup
.
final splitIntoGroupsExample = [1, 2, 3, 4, 5, 6, 7];
final List<List<int>> groups = splitIntoGroupsExample.splitIntoGroups(3);
print(groups); // [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7 ] ]
Is any element diferent from null AND is any element null
final withNullList = [1, 2, 3, null];
final withoutNullList = [1, 2, 3];
print(withNullList.isAnyElementDiffFromNull); // true
print(withoutNullList.isAnyElementDiffFromNull); // true
Remove null elements of a list
final withNullList = [1, 2, 3, null];
print(withNullList.removeNull); // [1, 2, 3]
Integer util's
bool isBiggerThen(int valueToBeCompared)
Will return true if the value is bigger then valueToBeCompared
.
bool isBiggerOrEqualThen(int valueToBeCompared)
Will return true if the value is bigger or equal then valueToBeCompared
.
bool isSmallerThen(int valueToBeCompared)
Will return true if the value is smaller then valueToBeCompared
.
bool isSmallerOrEqualThen(int valueToBeCompared)
Will return true if the value is smaller or equal then valueToBeCompared
.
Example of thoose 4 compare functions:
final isBiggerThenTest = 4.isBiggerThen(6); // false
final isBiggerOrEqualThenTest = 4.isBiggerOrEqualThen(4); // true
final isSmallerThenTest = 4.isSmallerThen(6); // true
final isSmallerOrEqualThenTest = 4.isSmallerOrEqualThen(4); // true
Map util's
Try cast map
Try to decode a json string into a map. If the string is not a valid json, will return null.
Is just a boilerplate to avoid try/catch blocks. Basically, this:
try {
return jsonDecode(this);
} catch (_) {
return null;
}
Example:
final String invalidJson = 'invalid json';
final String validJson = '{"name": "igor"}';
print(invalidJson.tryDecode); // null
print(validJson.tryDecode); // {"name": "igor"}
Cast functions
Transform a list into a map
Will cast a list into a map.
For each element in the list, will call the onElementToKey
and onElementToValue
functions.
Example:
final list = [
{
'name': 'igor',
'age': 23
},
{
'name': 'miranda',
'age': 30
},
];
final Map<String, int> persons = list.castToMap(
(element) {
return element['name'] as String;
},
(element) {
return element['age'] as int;
},
);
persons
map will be:
{
"igor": 23,
"miranda": 30
}
Transform a list into a map with mapper
Check castToMap documentation for base info about this function.
That because this function is basically a castToMap
but
with more info in each interation, such as:
- Is the first interation?
isFirst
- Is the last interation?
isLast
- The index of the current interation
index
- The value of the current interation
value
Transform a map into a list
For each Map entry, will map it to the return type with toElementFunc
function and each return will be a element in the List
.
final Map<String, int> personsMap = {
"Igor": 23,
"Miranda": 30,
};
final List<String> personsList = personsMap.castToList(
(key, value) {
return 'My name is $key, and I have $value years old.';
},
);
print(personsList);
Cast object/dynamic to desired type
Cast value to type R
.
Basically, a shortcut to this as R
:
final dynamic dynamicList = 3;
final int intList = dynamicList.as<int>();
print(intList); // 3
Made with ❤ by Igor Miranda
If you like the package, give a 👍