Skip to content

ipavlic/apex-fp

Repository files navigation

Apex FP

CI workflow codecov

Apex FP provides functional constructs for SObject collections!

Read the documentation

Apex FP documentation

Deploy to Salesforce

Deploy to Salesforce

Examples

Filter

List<Opportunity> largeOpportunities = SObjectCollection.of(opportunities)
	.filter(Fn.Match
		.field(Opportunity.Amount).greaterThan(150000)
		.also(Opportunity.AccountId).equals(accountId))
	.asList();

Map

List<Task> prospectingOpportunityTasks = 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))
	.asList();
List<Task> largeProspectingOpportunityFollowUpTasks = SObjectCollection.of(Trigger.new)
	.filter(Fn.Match.recordFields(new Opportunity(Stage = 'Prospecting')))
	.mapSome(
		Fn.Match.field(Opportunity.Amount).greaterThan(100000),
		Fn.MapTo(Task.SObjectType)
			.setField(Task.Subject, 'Follow up')
			.mapField(Task.WhatId, Opportunity.Id)
	)
	.asList();

Modify

List<Opportunity> largeOpportunities = SObjectCollection.of(opportunities)
	.forEach(Fn.Modify
		.setField(Opportunity.Rank__c, 'Excellent')
	)
	.asList();

Group

Map<Id, List<Account>> accountsByParentId = SObjectCollection.of(accounts).groupByIds(Account.ParentId);

Pick

List<Opportunity> idAndAmountOpportunities = SObjectCollection.of(opportunities)
	.pick(new Set<Schema.SObjectField>{Opportunity.Id, Opportunity.Amount})
	.asList();

Pluck

List<Decimal> amounts = SObjectCollection.of(opportunities).pluckDecimals(Opportunity.Amount);

Average

OptionalDecimal average = SObjectCollection.of(opportunities).mapToDecimal(Opportunity.Amount).average();

Sum

OptionalDecimal sum = SObjectCollection.of(opportunities).mapToDecimal(Opportunity.Amount).sum();

Min

OptionalDecimal min = SObjectCollection.of(opportunities).mapToDecimal(Opportunity.Amount).min();

Max

OptionalDecimal max = SObjectCollection.of(opportunities).mapToDecimal(Opportunity.Amount).max();

About

Functional programming for Salesforce Apex

Topics

Resources

License

Stars

317 stars

Watchers

30 watching

Forks

Packages

 
 
 

Contributors