Apex FP provides functional constructs for SObject
collections!
Transform SObjects
with a simple declarative API.
List<Opportunity> largeOpportunities = SObjectCollection.of(opportunities).filter(Fn.Match.field(Opportunity.Amount).greaterThan(150000).also(Opportunity.AccountId).equals(accountId)).asList();
List<Task> prospectingTasks = SObjectCollection.of(Trigger.new)
.filter(Fn.Match.recordFields(new Opportunity(Stage = 'Prospecting')))
.mapAll(Fn.MapTo(Task.SObjectType).setField(Task.Subject, 'Follow up').mapField(Task.WhatId, Opportunity.Id));
Map<Id, List<Account>> accountsByParentId = SObjectCollection.of(accounts).groupByIds(Account.ParentId);
Decimal averageOpportunityValue = SObjectCollection.of(opportunities).mapToDecimal(Opportunity.Amount).average();
Find more examples in the documentation.