Is this status change allowed
Orders move through a fixed lifecycle, and a support tool needs to know whether a requested change is one the system permits.
- The only moves allowed are: placed to paid, placed to cancelled, paid to packed, paid to refunded, packed to shipped, shipped to delivered.
- Everything else is refused, including staying where you are.
- Unknown status names are refused.
canTransition(current: string, target: string) → bool
Java needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.
Where you start
boolean canTransition(String current, String target) {
}
Worked examples
| Call | Result |
|---|---|
canTransition("placed", "paid") | true |
canTransition("paid", "refunded") | true |
canTransition("shipped", "delivered") | true |
canTransition("placed", "shipped") | false |
Hint
A set of allowed pairs is easier to get right than a nest of ifs.
Reference solution in Java
boolean canTransition(String current, String target) {
Set<String> allowed = new HashSet<>(Arrays.asList(
"placed>paid", "placed>cancelled", "paid>packed", "paid>refunded", "packed>shipped", "shipped>delivered"));
return allowed.contains(current + ">" + target);
}