Zero
Dependencies
2
Build Styles
39+
Built-in Validation Rules
Java 17+
Minimum Version
Define business rules in clean, readable Java — then orchestrate them with a RuleFlow.
// Build a Rule using lambdas
Rule rule = Rule.builder()
.given(condition((Boolean member, BigDecimal total)
-> member && total.compareTo(BigDecimal.valueOf(100)) > 0))
.then(action((Binding<BigDecimal> discount)
-> discount.setValue(BigDecimal.valueOf(0.10))))
.build();
// Run with auto-matched Bindings
rule.run(member -> true, total -> BigDecimal.valueOf(150));
// Orchestrate rules with a RuleFlow — new in 2.0
RuleFlow<BigDecimal> flow = RuleFlow.builder()
.name("DiscountFlow")
.param("member", Boolean.class)
.param("total", BigDecimal.class)
.bind(discount -> BigDecimal.ZERO)
.run(discountRule)
.<BigDecimal>returning(function((BigDecimal discount) -> discount))
.build();
// Validated inputs, orchestration & result extraction — built in
BigDecimal discount = flow.run(member -> true, total -> BigDecimal.valueOf(150));
@Rule
public class DiscountRule {
@Given
public boolean isEligible(Boolean member, BigDecimal total) {
return member && total.compareTo(BigDecimal.valueOf(100)) > 0;
}
@Then
public void applyDiscount(Binding<BigDecimal> discount) {
discount.setValue(BigDecimal.valueOf(0.10));
}
}