while (count < 11) {
System.debug(count);
count++;
}
Using the Iterator interface you can create a custom set of instructions for traversing a List through a loop. This is useful for data that exists in sources outside of Salesforce that you would normally define the scope of using a SELECT statement. Iterators can also be used if you have multiple SELECT statements.
To use custom iterators, you must create an Apex class that implements the Iterator interface.
Name | Arguments | Returns | Description |
---|---|---|---|
hasNext | Boolean | Returns true if there is another item in the collection being traversed, false otherwise. | |
next | Any type | Returns the next item in the collection. |
All methods in the Iterator interface must be declared as global or public.
IterableString x = new IterableString('This is a really cool test.'); while(x.hasNext()){ system.debug(x.next()); }
If you do not want to use a custom iterator with a list, but instead want to create your own data structure, you can use the Iterable interface to generate the data structure.
Name | Arguments | Returns | Description |
---|---|---|---|
iterator | Iterator class | Returns a reference to the iterator for this interface. |
The iterator method must be declared as global or public. It creates a reference to the iterator that you can then use to traverse the data structure.
global class CustomIterable implements Iterator<Account>{ List<Account> accs {get; set;} Integer i {get; set;} public CustomIterable(){ accs = [SELECT Id, Name, NumberOfEmployees FROM Account WHERE Name = 'false']; i = 0; } global boolean hasNext(){ if(i >= accs.size()) { return false; } else { return true; } } global Account next(){ // 8 is an arbitrary // constant in this example // that represents the // maximum size of the list. if(i == 8){return null;} i++; return accs[i-1]; } }
global class example implements iterable<Account>{ global Iterator<Account> Iterator(){ return new CustomIterable(); } }
global class batchClass implements Database.batchable<Account>{ global Iterable<Account> start(Database.batchableContext info){ return new example(); } global void execute(Database.batchableContext info, List<Account> scope){ List<Account> accsToUpdate = new List<Account>(); for(Account a : scope){ a.Name = 'true'; a.NumberOfEmployees = 69; accsToUpdate.add(a); } update accsToUpdate; } global void finish(Database.batchableContext info){ } }