10000 GitHub - ipavlic/apex-fp: Functional programming for Salesforce Apex
[go: up one dir, main page]

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(accountI
B36D
d))
	.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();
0