Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(209)

Side by Side Diff: sdk/lib/core/collection.dart

Issue 11366111: Make Iterable more powerful (and lazy). (Closed) Base URL: https://dart.googlecode.com/svn/experimental/lib_v2/dart
Patch Set: Undo unintended change. Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 /** 5 /**
6 * The common interface of all collections. 6 * The common interface of all collections.
7 *
8 * The [Collection] class contains a skeleton implementation of
9 * an iterator based collection.
10 */ 7 */
11 abstract class Collection<E> extends Iterable<E> { 8 abstract class Collection<E> extends Iterable<E> {
12 /** 9 /**
13 * Returns a new collection with the elements [: f(e) :] 10 * Adds an element to [this].
14 * for each element [:e:] of this collection.
15 * 11 *
16 * Subclasses of [Collection] should implement the [map] method 12 * Might throw an [UnsupportedError] if [this] is not extendable.
Lasse Reichstein Nielsen 2012/11/14 14:09:12 "extendable"? I think "extensible" is more common.
floitsch 2012/11/16 22:31:07 Done.
17 * to return a collection of the same general type as themselves.
18 * E.g., [List.map] should return a [List].
19 */ 13 */
20 Collection map(f(E element)); 14 void add(E element);
21
22 /**
23 * Returns a collection with the elements of this collection
24 * that satisfy the predicate [f].
25 *
26 * The returned collection should be of the same type as the collection
27 * creating it.
28 *
29 * An element satisfies the predicate [f] if [:f(element):]
30 * returns true.
31 */
32 Collection<E> filter(bool f(E element));
33 15
34 /** 16 /**
35 * Returns the number of elements in this collection. 17 * Returns the number of elements in this collection.
36 */ 18 */
37 int get length; 19 int get length;
38
39 /**
40 * Check whether the collection contains an element equal to [element].
41 */
42 bool contains(E element) {
43 for (E e in this) {
44 if (e == element) return true;
45 }
46 return false;
47 }
48
49 /**
50 * Applies the function [f] to each element of this collection.
51 */
52 void forEach(void f(E element)) {
53 for (E element in this) f(element);
54 }
55
56 /**
57 * Reduce a collection to a single value by iteratively combining each element
58 * of the collection with an existing value using the provided function.
59 * Use [initialValue] as the initial value, and the function [combine] to
60 * create a new value from the previous one and an element.
61 *
62 * Example of calculating the sum of a collection:
63 *
64 * collection.reduce(0, (prev, element) => prev + element);
65 */
66 Dynamic reduce(var initialValue,
67 Dynamic combine(var previousValue, E element)) {
68 var value = initialValue;
69 for (E element in this) value = combine(value, element);
70 return value;
71 }
72
73 /**
74 * Returns true if every elements of this collection satisify the
75 * predicate [f]. Returns false otherwise.
76 */
77 bool every(bool f(E element)) {
78 for (E element in this) {
79 if (!f(element)) return false;
80 }
81 return true;
82 }
83
84 /**
85 * Returns true if one element of this collection satisfies the
86 * predicate [f]. Returns false otherwise.
87 */
88 bool some(bool f(E element)) {
89 for (E element in this) {
90 if (f(element)) return true;
91 }
92 return false;
93 }
94
95 /**
96 * Returns true if there is no element in this collection.
97 */
98 bool get isEmpty => !iterator().hasNext;
99 } 20 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698