Есть тест к 16 задаче на первую часть, вывожу деньги от показа видео по датам, даты храню в мапе, ключ мапы -дата, значение тип дабл
private TreeMap <Date, Double> dayProfitMap = new TreeMap<>();
Добавляю в мапу таким образом
private void makeAdvertisementInfo(){
List<EventDataRow> list = statisticStorage.get().get(SELECTED_VIDEOS);
for(EventDataRow dataRow: list){
VideoSelectedEventDataRow data = (VideoSelectedEventDataRow) dataRow;
dayProfitMap.put(data.getDate(), dayProfitMap.getOrDefault(data.getDate(),
new Double(0)) + data.getAmount());
}
}
Запускаю тест ниже несколько раз и бывает такое что дата 11 сентября 2 раза ! Как получается 2 одинаковых ключа в мапе? Т.е. тесты обычно показывают на выходе 2 даты, но иногда три, код не меняю... Почему-то одинаковые даты имеют разный хеш-код...
01-Feb-2023 - 100,00
11-Sep-2022 - 500,00
11-Sep-2022 - 100,00
Total - 700
public class Test {
public static void main(String[] args) {
List<Advertisement> videos = new LinkedList<>();
StatisticManager.getInstance().register(new VideoSelectedEventDataRow(videos, 100, 10));
StatisticManager.getInstance().register(new VideoSelectedEventDataRow(videos, 100, 10));
StatisticManager.getInstance().register(new VideoSelectedEventDataRow(videos, 100, 10));
StatisticManager.getInstance().register(new VideoSelectedEventDataRow(videos, 100, 10));
VideoSelectedEventDataRow videoEvent1 = new VideoSelectedEventDataRow(videos, 100, 10);
videoEvent1.currentDate = new GregorianCalendar(2023,01,01).getTime();
VideoSelectedEventDataRow videoEvent2 = new VideoSelectedEventDataRow(videos, 100, 10);
StatisticManager.getInstance().register(videoEvent1);
StatisticManager.getInstance().register(videoEvent2);
StatisticManager.getInstance().register(new VideoSelectedEventDataRow(videos, 100, 10));
DirectorTablet directorTablet = new DirectorTablet();
directorTablet.printAdvertisementProfit();
//directorTablet.printCookWorkloading();
}
Date дают разный хеш-код почему-то и именно у первой даты отличается хеш-код =(package com.javarush.task.task27.task2712;
import com.javarush.task.task27.task2712.ad.AdvertisementManager;
import com.javarush.task.task27.task2712.ad.NoVideoAvailableException;
import com.javarush.task.task27.task2712.kitchen.Order;
import java.util.Observable;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Tablet extends Observable {
private final int number;
private static Logger logger = Logger.getLogger(Tablet.class.getName());
public Tablet(int number) {
this.number = number;
}
public Order createOrder() {
Order order = null;
try {
order = new Order(this);
} catch (Exception e) {
logger.log(Level.SEVERE, "Console is unavailable.");
} finally {
if (!order.isEmpty()) {
setChanged();
notifyObservers(order);
AdvertisementManager advertisementManager = new AdvertisementManager(order.getTotalCookingTime() * 60);
try {
advertisementManager.processVideos();
} catch (NoVideoAvailableException e) {
//StatisticManager.getInstance().register(new NoAvailableVideoEventDataRow(order.getTotalCookingTime() * 60));
logger.log(Level.INFO, "No video is available for the order " + order.toString());
}
}
}
return order;
}
public String toString() {
return "Tablet{" +
"number=" + number +
'}';
}
}