The supplied Transform functional interface has String apply(String value); inputs/results are nonnull unless a transform deliberately throws.
Prototype: applyAll(String input,List<Transform>) -> String applies transforms once each in list order. Empty list returns original input. Propagate an exception unchanged and stop before later transforms; preserve list.
Final: pipeline(List<Transform>) -> Transform returns deferred composition with the same application contract. Construction invokes nothing and snapshots the transform list, so caller list changes do not alter behavior. Repeated calls run the pipeline independently; transform objects themselves are intentionally shared.
Complete the starter code, then run the checks.
Results and errors will appear here.
Java runs on this device with CheerpJ 4.3.