Untitled
unknown
plain_text
2 years ago
2.4 kB
8
Indexable
class PriceLadder {
private final Map<String, Map<Double, Map<Integer, Integer>>> marketData;
private final Map<Integer, Double> orderPrices;
public PriceLadder() {
marketData = new HashMap<>();
orderPrices = new HashMap<>();
}
public void AddOrder(AddOrder order) {
marketData.putIfAbsent(order.artist, new TreeMap<>(Collections.reverseOrder()));
Map<Double, Map<Integer, Integer>> artistData = marketData.get(order.artist);
artistData.putIfAbsent(order.price, new HashMap<>());
artistData.get(order.price).put(order.orderId, order.quantity);
orderPrices.put(order.orderId, order.price);
}
public void DeleteOrder(DeleteOrder delete) {
if (orderPrices.containsKey(delete.orderId)) {
double price = orderPrices.get(delete.orderId);
Map<Double, Map<Integer, Integer>> artistData = marketData.get(delete.artist);
if (artistData.containsKey(price)) {
artistData.get(price).remove(delete.orderId);
if (artistData.get(price).isEmpty()) {
artistData.remove(price);
}
}
orderPrices.remove(delete.orderId);
}
}
public void DeletePriceLevel(DeletePriceLevel deletePriceLevel) {
if (marketData.containsKey(deletePriceLevel.artist)) {
Map<Double, Map<Integer, Integer>> artistData = marketData.get(deletePriceLevel.artist);
artistData.remove(deletePriceLevel.price);
}
}
public void GetPriceLevels(String artist, int numberOfPriceLevels) {
System.out.println(artist);
if (marketData.containsKey(artist)) {
int counter = 0;
for (Map.Entry<Double, Map<Integer, Integer>> entry : marketData.get(artist).entrySet()) {
if (counter >= numberOfPriceLevels) break;
double price = entry.getKey();
int buyQty = 0, sellQty = 0;
for (int qty : entry.getValue().values()) {
if (qty > 0) {
buyQty += qty;
} else {
sellQty -= qty;
}
}
System.out.println(buyQty + " " + (price % 1 == 0 ? String.format("%.0f", price) : price) + " " + sellQty);
counter++;
}
}
}
}
Editor is loading...