@@ -14,29 +14,33 @@ import 'dart:collection' show Queue;
14
14
15
15
import 'package:collection/collection.dart' show mergeMaps;
16
16
17
+ import '/src/core/src/let.dart' ;
18
+ import 'non_nulls_on_map_extension.dart' ;
17
19
18
20
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
19
21
20
22
/// Merges two Iterables into one. Supported Iterable types are List, Set, and
21
23
/// Queue.
22
- T mergeListsSetsOrQueues <T extends Iterable >(T a, Iterable b) {
24
+ Iterable mergeListsSetsOrQueues (Iterable a, Iterable b) {
25
+ final a1 = a.nonNulls;
26
+ final b1 = b.nonNulls;
23
27
Iterable result;
24
- if (a is List ) {
25
- result = List .of (a );
28
+ if (a1 is List ) {
29
+ result = List .of (a1 );
26
30
var index = 0 ;
27
- for (var item in b ) {
31
+ for (var item in b1 ) {
28
32
if (result.length <= index || result.elementAt (index) != item) {
29
33
(result as dynamic ).add (item);
30
34
}
31
35
index++ ;
32
36
}
33
- } else if (a is Set ) {
34
- result = Set .of (a );
35
- (result as dynamic ).addAll (b );
36
- } else if (a is Queue ) {
37
- result = Queue .of (a );
37
+ } else if (a1 is Set ) {
38
+ result = Set .of (a1 );
39
+ (result as dynamic ).addAll (b1 );
40
+ } else if (a1 is Queue ) {
41
+ result = Queue .of (a1 );
38
42
var index = 0 ;
39
- for (var item in b ) {
43
+ for (var item in b1 ) {
40
44
if (result.length <= index || result.elementAt (index) != item) {
41
45
(result as dynamic ).add (item);
42
46
}
@@ -46,13 +50,13 @@ T mergeListsSetsOrQueues<T extends Iterable>(T a, Iterable b) {
46
50
throw ArgumentError ('Unsupported Iterable type' );
47
51
}
48
52
49
- return result as T ;
53
+ return result;
50
54
}
51
55
52
56
/// Merges two iterables into one iterable.
53
57
Iterable mergeIterables (dynamic a, dynamic b) {
54
- final aa = a is Iterable ? a : [a] ;
55
- final bb = b is Iterable ? b : [b] ;
58
+ final aa = a is Iterable ? a.nonNulls : Iterable . generate ( 1 , (_) => a) ;
59
+ final bb = b is Iterable ? b.nonNulls : Iterable . generate ( 1 , (_) => b) ;
56
60
return aa.followedBy (bb);
57
61
}
58
62
@@ -68,10 +72,10 @@ dynamic mergeDataDeep(
68
72
b,
69
73
value: (a, b) {
70
74
if (a is Map && b is Map ) {
71
- return mergeDataDeep (a, b, elseFilter);
75
+ return mergeDataDeep (a.nonNulls , b.nonNulls , elseFilter);
72
76
}
73
77
if (a is List || a is Set || a is Queue ) {
74
- return mergeListsSetsOrQueues < Iterable > (a, b);
78
+ return mergeListsSetsOrQueues (a, b);
75
79
}
76
80
if (a is Iterable ) {
77
81
return mergeIterables (a, b);
@@ -81,7 +85,7 @@ dynamic mergeDataDeep(
81
85
);
82
86
}
83
87
if (a is List || a is Set || a is Queue ) {
84
- return mergeListsSetsOrQueues < Iterable > (a, b);
88
+ return mergeListsSetsOrQueues (a, b);
85
89
}
86
90
if (a is Iterable ) {
87
91
return mergeIterables (a, b);
0 commit comments