Skip to content

Instantly share code, notes, and snippets.

@trynx
Created October 26, 2019 22:10
Show Gist options
  • Save trynx/bd922e68c57f0f8d2ab4a150e26ba514 to your computer and use it in GitHub Desktop.
Save trynx/bd922e68c57f0f8d2ab4a150e26ba514 to your computer and use it in GitHub Desktop.
Android Academy exercise
import java.math.BigDecimal
import java.time.LocalDateTime
fun main() {
// Setup Test Orders
val firstOrderLines = listOf(OrdersAnalyzer.OrderLine(9872, "Pencil", 3, BigDecimal.valueOf(3)))
val firstOrder = OrdersAnalyzer.Order(554, LocalDateTime.parse("2017-03-25T10:35:20"), firstOrderLines)
val secondOrderLines = listOf(OrdersAnalyzer.OrderLine(9872, "Pencil", 2, BigDecimal.valueOf(3)),
OrdersAnalyzer.OrderLine(1746, "Eraser", 1, BigDecimal.valueOf(1)))
val secondOrder = OrdersAnalyzer.Order(555, LocalDateTime.parse("2017-03-25T11:24:20"), secondOrderLines)
val thirdOrderLines = listOf(OrdersAnalyzer.OrderLine(5723, "Pen", 4, BigDecimal.valueOf(4.22)),
OrdersAnalyzer.OrderLine(9872, "Pencil", 3, BigDecimal.valueOf(3.12)),
OrdersAnalyzer.OrderLine(3433, "Erasers Set", 1, BigDecimal.valueOf(6.15)))
val thirdOrder = OrdersAnalyzer.Order(453, LocalDateTime.parse("2017-03-27T14:53:12"), thirdOrderLines)
val fourthOrderLines = listOf(OrdersAnalyzer.OrderLine(5723, "Pen", 7, BigDecimal.valueOf(4.22)),
OrdersAnalyzer.OrderLine(3433, "Erasers Set", 2, BigDecimal.valueOf(6.15)))
val fourthOrder = OrdersAnalyzer.Order(431, LocalDateTime.parse("2017-03-20T12:15:02"), fourthOrderLines)
val fifthOrderLines = listOf(OrdersAnalyzer.OrderLine(9872, "Pencil", 4, BigDecimal.valueOf(3.12)),
OrdersAnalyzer.OrderLine(4098, "Marker", 5, BigDecimal.valueOf(4.50)))
val fifthOrder = OrdersAnalyzer.Order(690, LocalDateTime.parse("2017-03-26T11:14:00"), fifthOrderLines)
val orderList = listOf(firstOrder, secondOrder, thirdOrder, fourthOrder, fifthOrder)
// Run test
val ordersAnalyzer = OrdersAnalyzer()
print(ordersAnalyzer.totalDailySales(orderList))
}
import java.math.BigDecimal
import java.time.DayOfWeek
import java.time.LocalDateTime
class OrdersAnalyzer {
data class Order(val orderId: Int, val creationDate: LocalDateTime, val orderLines: List<OrderLine>)
data class OrderLine(val productId: Int, val name: String, val quantity: Int, val unitPrice: BigDecimal)
fun totalDailySales(orders: List<Order>): Map<DayOfWeek, Int> {
val dailySalesMap = mutableMapOf<DayOfWeek, Int>()
for (dayOfWeek in DayOfWeek.values()) {
dailySalesMap[dayOfWeek] = 0
}
var tempOrderDayOfWeek: DayOfWeek
var tempOrderQty: Int
var tempDayOfWeekQty: Int
// Get each orderLine quantity and add to the day within dailySalesMap
for (order in orders) {
tempOrderDayOfWeek = order.creationDate.dayOfWeek
tempOrderQty = 0
order.orderLines.forEach { tempOrderQty += it.quantity }
tempDayOfWeekQty = dailySalesMap.getOrDefault(tempOrderDayOfWeek, 0)
dailySalesMap[tempOrderDayOfWeek] = tempDayOfWeekQty + tempOrderQty
}
return dailySalesMap
}
}
@trynx
Copy link
Author

trynx commented Oct 26, 2019

Feel free to leave any feedback =]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment