Total a basket that came off a queue
Order lines arrive from a message queue and the payload is not always clean: a line can be missing entirely, and quantities have been seen at zero.
- A missing line contributes nothing and must not stop the sum.
- A line with a quantity of zero or less contributes nothing either.
- The total is in minor units.
orderTotal(lines: list<Line?>) → int
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
int orderTotal(List<Line> lines) {
}
Worked examples
| Call | Result |
|---|---|
orderTotal(Main.<Line>ls(new Line("A", 2, 100), new Line("B", 3, 50))) | 350 |
orderTotal(Main.<Line>ls(new Line("A", 1, 10), (Line) null, new Line("C", 2, 5))) | 20 |
orderTotal(Main.<Line>ls(new Line("A", 0, 999), new Line("B", -1, 999))) | 0 |
orderTotal(Main.<Line>ls()) | 0 |
Hint
Guard inside the loop, not before it. One bad line should not cost you the rest.
Reference solution in Java
int orderTotal(List<Line> lines) {
int total = 0;
for (Line l : lines) {
if (l == null || l.qty <= 0) continue;
total += l.qty * l.unitPrice;
}
return total;
}