List<Account> accs = [SELECT Id, Name FROM Account LIMIT 5];
// Query all Contacts in one go
Map<Id, List<Contact>> accToContacts = new Map<Id, List<Contact>>();
for (Contact c : [SELECT Id, LastName, AccountId FROM Contact WHERE AccountId IN :accs]) {
if (!accToContacts.containsKey(c.AccountId)) {
accToContacts.put(c.AccountId, new List<Contact>());
}
accToContacts.get(c.AccountId).add(c);
}
// Loop accounts safely
for (Account acc : accs) {
List<Contact> cons = accToContacts.get(acc.Id);
System.debug('Contacts for ' + acc.Name + ': ' + (cons != null ? cons.size() : 0));
}
TGlzdDxBY2NvdW50PiBhY2NzID0gW1NFTEVDVCBJZCwgTmFtZSBGUk9NIEFjY291bnQgTElNSVQgNV07CgovLyBRdWVyeSBhbGwgQ29udGFjdHMgaW4gb25lIGdvCk1hcDxJZCwgTGlzdDxDb250YWN0Pj4gYWNjVG9Db250YWN0cyA9IG5ldyBNYXA8SWQsIExpc3Q8Q29udGFjdD4+KCk7Cgpmb3IgKENvbnRhY3QgYyA6IFtTRUxFQ1QgSWQsIExhc3ROYW1lLCBBY2NvdW50SWQgRlJPTSBDb250YWN0IFdIRVJFIEFjY291bnRJZCBJTiA6YWNjc10pIHsKICAgIGlmICghYWNjVG9Db250YWN0cy5jb250YWluc0tleShjLkFjY291bnRJZCkpIHsKICAgICAgICBhY2NUb0NvbnRhY3RzLnB1dChjLkFjY291bnRJZCwgbmV3IExpc3Q8Q29udGFjdD4oKSk7CiAgICB9CiAgICBhY2NUb0NvbnRhY3RzLmdldChjLkFjY291bnRJZCkuYWRkKGMpOwp9CgovLyBMb29wIGFjY291bnRzIHNhZmVseQpmb3IgKEFjY291bnQgYWNjIDogYWNjcykgewogICAgTGlzdDxDb250YWN0PiBjb25zID0gYWNjVG9Db250YWN0cy5nZXQoYWNjLklkKTsKICAgIFN5c3RlbS5kZWJ1ZygnQ29udGFjdHMgZm9yICcgKyBhY2MuTmFtZSArICc6ICcgKyAoY29ucyAhPSBudWxsID8gY29ucy5zaXplKCkgOiAwKSk7Cn0K