Skip to content

Repository files navigation

left fold GraalVM

Kotlin to the rescue

fold the universe: reduction with java 8 streams API

DomainEvents.kt

@file:JvmName("DomainEvents")
interfaceDomainEvent {
val type:Class<outDomainEvent>
get() =this.javaClass
}
classCounterCreatedEvent : DomainEventclassCounterIncrementedEvent : DomainEventclassCounterDecrementedEvent : DomainEventfun Aggregate.apply(event:DomainEvent): Aggregate=when (event) {
isCounterCreatedEvent->this.on(event)
isCounterIncrementedEvent->this.on(event)
isCounterDecrementedEvent->this.on(event)
else->throwIllegalStateException("unexpected unsupported domain event occur: $event")
}

Some.java

Optional<Aggregate> foldLeft(AggregateinitialState, DomainEvent... events) {
if (events.length <= 0) returnOptional.empty();
Aggregateaccumulator = initialState;
for (DomainEventevent : events)
accumulator = DomainEvents.apply(accumulator, event);
returnOptional.of(accumulator);
}

Run tests

./gradlew clean test

Links

Releases

Packages

Used by

Contributors

Languages