Overview
Some help functions for using Lists
Whats MS_List_Utils do
Add useful functions to map:
addAround
Returns new list with items generated around list.addBetween
Returns new list with items generated between list.containsAll
Returns new list with items generated between list.containsAny
Returns new list with items generated between list.containsAtLeast
Returns new list with items generated between list.containsHits
Returns new list with items generated between list.diff
Elements that you have in listA and do not have in listB.firstOrNull
Returns first element in array, if it's empty returns null.firstWhereOrAdd
Returns the first element that satisfies the test if there isn't one add a new one and return it.flat
Returns a flatted alist
that has other lists inside other lists inside other lists ... recursiveintersection
Common elements between listA and listBisFirst
Returns a true value if element is the first in the list.isLast
Returns a true value if element is the last in the list.joinLast
It joins all elements of the list with one separator and for the last iteration a different separator.lastOrNull
Returns last element in array, if it's empty returns null.lastWhereOrAdd
Returns the last element that satisfies the test if there isn't one add a new one and return it.toMap
Returns a Map with keys that's generated by generator.toStream
Creates a stream with the items in the list.
Usage
Just import lib and use extensions, call the functions to starts work:
// Don't forget to import
import 'package:ms_list_utils/ms_list_utils.dart';
List list = ['😁','😒','😊'];
final newList = addAround(list, (index,previous,next) => '🍨');
print(newList);//['🍨','😁','🍨','😒','🍨','😊','🍨']
// Or use extensions
final newList = list.addAround((index,previous,next) => '🍨');
print(newList);//['🍨','😁','🍨','😒','🍨','😊','🍨']
addAround
The function addAround
returns new list with items generated around list.
test('tests the function add_around.dart', () {
final initialValue = [1, 2, 3, 4];
final result = addAround(initialValue,
(int index, int? previousValue, int? nextValue) {
return 5;
});
expect(result, [5, 1, 5, 2, 5, 3, 5, 4, 5]);
expect(initialValue.addAround((index, previous, next) => 5),
[5, 1, 5, 2, 5, 3, 5, 4, 5]);
});
see more in test file.
addBetween
The function addBetween
returns new list with items generated between list.
test('add values between in list', () {
final initialValue = <int>[1, 2, 3];
final result = addBetween<int>(
initialValue, (int index, previousValue, nextValue) => 5);
expect(result, [1, 5, 2, 5, 3]);
expect(
initialValue.addBetween((index, previous, next) => 5), [1, 5, 2, 5, 3]);
});
see more in test file.
addBetween
The function diff
returns elements that you have in listA and do not have in listB.
test('differences between two lists', () {
final listA = [1, 2, 3, 4, 5];
final listB = [2, 4, 6];
expect(diff(listA, listB), orderedEquals([1, 3, 5]));
expect(diff(listB, listA), orderedEquals([6]));
expect(listB - listA, orderedEquals([6]));
expect(listB.diff(listA), orderedEquals([6]));
});
see more in test file.
firstWhereOrAdd
The function firstWhereOrAdd
returns the first element that satisfies the test if there isn't one add a new one and
return it.
test('tests the function first_where_or_add.dart', () {
final list = [1, 2, 3];
expect(firstWhereOrAdd(list, (value) => value == 4, () => 4), 4);
expect(list, [1, 2, 3, 4]);
final listE = [1, 2, 3];
expect(listE.firstWhereOrAdd((value) => value == 4, () => 4), 4);
expect(listE, [1, 2, 3, 4]);
});
flat
The function flat
returns a flatted a list
that has other lists inside other lists inside other lists ... recursive
return it.
test('flat dynamic', () {
final multiList = [
1,
2,
3,
[
"4",
"5",
[
6,
7,
[true, true, false]
]
]
];
final result = flat(multiList);
expect(result, [1, 2, 3, "4", "5", 6, 7, true, true, false]);
expect(multiList.flat(), [1, 2, 3, "4", "5", 6, 7, true, true, false]);
});
flat
The function intersection
returns common items between lists
test('intersection between two lists', () {
final listA = [1, 2, 3, 4, 5];
final listB = [2, 4, 6];
expect(intersection(listA, listB), orderedEquals([2, 4]));
expect(listA.intersection(listB), orderedEquals([2, 4]));
});
see more in test file.
isFirst
The function isFirst
returns a true value if element is the first in the list.
test('tests the function is_first.dart', () {
final list = [1, 2, 3];
expect(isFirst(list, 3), isFalse);
expect(isFirst(list, 1), isTrue);
expect(isFirstIndex(list, 3), isFalse);
expect(isFirstIndex(list, 0), isTrue);
expect(list.isFirst(3), isFalse);
expect(list.isFirst(1), isTrue);
expect(list.isFirstIndex(3), isFalse);
expect(list.isFirstIndex(0), isTrue);
});
see more in test file.
isLast
The function isLast
returns a true value if element is the last in the list.
test('tests the function is_last.dart', () {
final list = [1, 2, 3];
expect(isLast(list, 1), isFalse);
expect(isLast(list, 3), isTrue);
expect(isLastIndex(list, 1), isFalse);
expect(isLastIndex(list, 2), isTrue);
expect(list.isLast(1), isFalse);
expect(list.isLast(3), isTrue);
expect(list.isLastIndex(1), isFalse);
expect(list.isLastIndex(2), isTrue);
});
see more in test file.
joinLast
The function joinLast
it joins all elements of the list with one separator and for the last iteration a different
separator.
test('tests the function join.dart', () {
final list = [1, 2, 3];
expect(join(list, ', ', ' and '), '1, 2 and 3');
expect(join(list), '123');
expect(list.joinLast(', ', ' and '), '1, 2 and 3');
expect(list.joinLast(), '123');
});
see more in test file.
lastOrNull
The function lastOrNull
returns last element in array, if it's empty returns null.
test('tests the function last_or_null.dart', () {
final emptyList = [];
final list = [1, 2, 3];
expect(lastOrNull(emptyList), null);
expect(lastOrNull(list), 3);
expect(emptyList.lastOrNull, null);
expect(list.lastOrNull, 3);
});
see more in test file.
lastWhereOrAdd
The function lastWhereOrAdd
returns the last element that satisfies the test if there isn't one add a new one and
return it.
test('tests the function last_where_or_add.dart', () {
final list = [1, 2, 3];
expect(lastWhereOrAdd(list, (value) => value == 4, () => 4), 4);
expect(list, [1, 2, 3, 4]);
final listE = [1, 2, 3];
expect(listE.lastWhereOrAdd((value) => value == 4, () => 4), 4);
expect(listE, [1, 2, 3, 4]);
});
see more in test file.
toMap
The function toMap
returns a Map with keys that's generated by generator.
final list = [1, 2, 3];
expect(toMap<String, int>(list, (value) => value.toString()),
{'1': 1, '2': 2, '3': 3});
expect(list.toMap((value) => "$value"), {'1': 1, '2': 2, '3': 3});
});
see more in test file.
toStream
The function toStream
returns a stream with the items in the list.
test('tests the function to_stream.dart', () async {
await expectLater([1, 2, 3].toStream(), emitsInOrder([1, 2, 3]));
await expectLater([1, 2, 3].toStream(const Duration(milliseconds: 85)),
emitsInOrder([1, 2, 3]));
await expectLater(toStream([1, 2, 3]), emitsInOrder([1, 2, 3]));
});
see more in test file.