| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart.core; | 5 part of dart.core; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * The [Iterable] interface allows to get an [Iterator] out of an | 8 * The [Iterable] interface allows to get an [Iterator] out of an |
| 9 * [Iterable] object. | 9 * [Iterable] object. |
| 10 * | 10 * |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 } | 86 } |
| 87 | 87 |
| 88 /** | 88 /** |
| 89 * Applies the function [f] to each element of this collection. | 89 * Applies the function [f] to each element of this collection. |
| 90 */ | 90 */ |
| 91 void forEach(void f(E element)) { | 91 void forEach(void f(E element)) { |
| 92 for (E element in this) f(element); | 92 for (E element in this) f(element); |
| 93 } | 93 } |
| 94 | 94 |
| 95 /** | 95 /** |
| 96 * Reduce a collection to a single value by iteratively combining each element | 96 * Reduce a collection to a single value by iteratively combining elements |
| 97 * of the collection with an existing value using the provided function. | 97 * of the collection using the provided function. |
| 98 * Use [initialValue] as the initial value, and the function [combine] to | |
| 99 * create a new value from the previous one and an element. | |
| 100 * | 98 * |
| 101 * Example of calculating the sum of an iterable: | 99 * Example of calculating the sum of an iterable: |
| 102 * | 100 * |
| 103 * iterable.reduce((prev, element) => prev + element); | 101 * iterable.reduce((value, element) => value + element); |
| 104 * | 102 * |
| 105 * *UPCOMING API-CHANGE*: this method will soon be changed to not take | |
| 106 * an initial value: `iterable.reduce(min)`. Use [fold] instead. | |
| 107 */ | 103 */ |
| 108 @deprecated | 104 E reduce(E combine(E value, E element)) { |
| 109 dynamic reduce(var initialValue, | 105 Iterator<E> iterator = this.iterator; |
| 110 dynamic combine(var previousValue, E element)) { | 106 if (!iterator.moveNext()) { |
| 111 return fold(initialValue, combine); | 107 throw new StateError("No elements"); |
| 108 } |
| 109 E value = iterator.current; |
| 110 while (iterator.moveNext()) { |
| 111 value = combine(value, iterator.current); |
| 112 } |
| 113 return value; |
| 112 } | 114 } |
| 113 | 115 |
| 114 /** | 116 /** |
| 115 * Reduce a collection to a single value by iteratively combining each element | 117 * Reduce a collection to a single value by iteratively combining each element |
| 116 * of the collection with an existing value using the provided function. | 118 * of the collection with an existing value using the provided function. |
| 117 * Use [initialValue] as the initial value, and the function [combine] to | 119 * Use [initialValue] as the initial value, and the function [combine] to |
| 118 * create a new value from the previous one and an element. | 120 * create a new value from the previous one and an element. |
| 119 * | 121 * |
| 120 * Example of calculating the sum of an iterable: | 122 * Example of calculating the sum of an iterable: |
| 121 * | 123 * |
| 122 * iterable.fold(0, (prev, element) => prev + element); | 124 * iterable.fold(0, (prev, element) => prev + element); |
| 125 * |
| 123 */ | 126 */ |
| 124 dynamic fold(var initialValue, | 127 dynamic fold(var initialValue, |
| 125 dynamic combine(var previousValue, E element)) { | 128 dynamic combine(var previousValue, E element)) { |
| 126 var value = initialValue; | 129 var value = initialValue; |
| 127 for (E element in this) value = combine(value, element); | 130 for (E element in this) value = combine(value, element); |
| 128 return value; | 131 return value; |
| 129 } | 132 } |
| 130 | 133 |
| 131 /** | 134 /** |
| 132 * Returns true if every elements of this collection satisify the | 135 * Returns true if every elements of this collection satisify the |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 int get length { | 179 int get length { |
| 177 int count = 0; | 180 int count = 0; |
| 178 Iterator it = iterator; | 181 Iterator it = iterator; |
| 179 while (it.moveNext()) { | 182 while (it.moveNext()) { |
| 180 count++; | 183 count++; |
| 181 } | 184 } |
| 182 return count; | 185 return count; |
| 183 } | 186 } |
| 184 | 187 |
| 185 /** | 188 /** |
| 186 * Find the least element in the iterable. | |
| 187 * | |
| 188 * Returns null if the iterable is empty. | |
| 189 * Otherwise returns an element [:x:] of this [Iterable] so that | |
| 190 * [:x:] is not greater than [:y:] (that is, [:compare(x, y) <= 0:]) for all | |
| 191 * other elements [:y:] in the iterable. | |
| 192 * | |
| 193 * The [compare] function must be a proper [Comparator<T>]. If a function is | |
| 194 * not provided, [compare] defaults to [Comparable.compare]. | |
| 195 * | |
| 196 * *Deprecated*. Use [reduce] with a binary min method if needed. | |
| 197 */ | |
| 198 @deprecated | |
| 199 E min([int compare(E a, E b)]) { | |
| 200 if (compare == null) compare = Comparable.compare; | |
| 201 Iterator it = iterator; | |
| 202 if (!it.moveNext()) return null; | |
| 203 E min = it.current; | |
| 204 while (it.moveNext()) { | |
| 205 E current = it.current; | |
| 206 if (compare(min, current) > 0) min = current; | |
| 207 } | |
| 208 return min; | |
| 209 } | |
| 210 | |
| 211 /** | |
| 212 * Find the largest element in the iterable. | |
| 213 * | |
| 214 * Returns null if the iterable is empty. | |
| 215 * Otherwise returns an element [:x:] of this [Iterable] so that | |
| 216 * [:x:] is not smaller than [:y:] (that is, [:compare(x, y) >= 0:]) for all | |
| 217 * other elements [:y:] in the iterable. | |
| 218 * | |
| 219 * The [compare] function must be a proper [Comparator<T>]. If a function is | |
| 220 * not provided, [compare] defaults to [Comparable.compare]. | |
| 221 * | |
| 222 * *Deprecated*. Use [reduce] with a binary max method if needed. | |
| 223 */ | |
| 224 @deprecated | |
| 225 E max([int compare(E a, E b)]) { | |
| 226 if (compare == null) compare = Comparable.compare; | |
| 227 Iterator it = iterator; | |
| 228 if (!it.moveNext()) return null; | |
| 229 E max = it.current; | |
| 230 while (it.moveNext()) { | |
| 231 E current = it.current; | |
| 232 if (compare(max, current) < 0) max = current; | |
| 233 } | |
| 234 return max; | |
| 235 } | |
| 236 | |
| 237 /** | |
| 238 * Returns true if there is no element in this collection. | 189 * Returns true if there is no element in this collection. |
| 239 */ | 190 */ |
| 240 bool get isEmpty => !iterator.moveNext(); | 191 bool get isEmpty => !iterator.moveNext(); |
| 241 | 192 |
| 242 /** | 193 /** |
| 243 * Returns an [Iterable] with at most [n] elements. | 194 * Returns an [Iterable] with at most [n] elements. |
| 244 * | 195 * |
| 245 * The returned [Iterable] may contain fewer than [n] elements, if [this] | 196 * The returned [Iterable] may contain fewer than [n] elements, if [this] |
| 246 * contains fewer than [n] elements. | 197 * contains fewer than [n] elements. |
| 247 */ | 198 */ |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 446 */ | 397 */ |
| 447 abstract class BidirectionalIterator<T> extends Iterator<T> { | 398 abstract class BidirectionalIterator<T> extends Iterator<T> { |
| 448 /** | 399 /** |
| 449 * Move back to the previous element. | 400 * Move back to the previous element. |
| 450 * | 401 * |
| 451 * Returns true and updates [current] if successful. Returns false | 402 * Returns true and updates [current] if successful. Returns false |
| 452 * and sets [current] to null if there is no previous element. | 403 * and sets [current] to null if there is no previous element. |
| 453 */ | 404 */ |
| 454 bool movePrevious(); | 405 bool movePrevious(); |
| 455 } | 406 } |
| OLD | NEW |