Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Secundum
1 / 1 / 0
Регистрация: 29.09.2013
Сообщений: 27
1

Сохранение HashMap в файле

07.04.2019, 03:57. Просмотров 1124. Ответов 3

Задача моей программы в том, что бы пользователь мог создавать заказы и после нажатия на кнопку "сохранить заказы" - ВСЕ введеные заказы сохраняются в файле. В моем случае только последний заказ сохраняется в файле, а первые куда то проподают

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    
private Map<LocalDate, Map<Integer, OrderDTO>> orders = new HashMap<>();
 
//пользователь вводит данные 
public OrderDTO addOrder(OrderDTO order)  { //информация о заказе передается через другой пакет
    Map<Integer, OrderDTO> currentOrder = new HashMap<>();
    LocalDate ld = order.getLd();
    order.setOrderN(counter++);
    currentOrder.put(order.getOrderN(), order);      
    orders.put(ld, currentOrder); 
    return order; //возращаем заказ, когда взращаешь orders HashMap тоже сохраняется только последний заказ
}
 
//пользователь нажимает на кнопку "сохранить заказы"
    public void saveWork(LocalDate ld) { информация о дате передается через другой пакет, тут нет ошибки
        writeOrder(ld);//
    }
 
//заказы сохраняются в файле 
   private void writeOrder(LocalDate ld) { 
        String date = ld.format(DateTimeFormatter.ofPattern("MMddyyyy"));
        String fileName = ORDER_FILE + date + ".txt";
        PrintWriter out;
            out = new PrintWriter(new FileWriter(fileName));
        Map<Integer, OrderDTO> myOrders = orders.get(ld);
        if (myOrders == null) {
            return;
        }
        List<OrderDTO> ordersList = new ArrayList<>(myOrders.values());
        for (OrderDTO order : ordersList) {
            out.println(order.getOrderN() + DELIMITER
                    + order.getCustomer() + DELIMITER
                    + order.getState() + DELIMITER
                    + order.getProduct() + DELIMITER
.........
            out.flush();
        }
        out.close();
    }
возможно ошибка в параметрах методов или то что нужно возращать, я не всегда знаю что нужно вернуть и какие параметры указать в методах, но точно не знаю
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2019, 03:57
Ответы с готовыми решениями:

Вставка HashMap в HashMap меняет все элементы
Вставляю HashMap в HashMap генерируя карту доски для шахмат, привожу тестовый пример, вставляется...

Сохранение properties в jar-файле
Проблема в сохранении файла в jar архиве. Если запускать проект из IDE, то проблем не возникает. ...

HashMap
Допустим, есть HashMap (нет, код привести не могу). В нем пары слов - на инглише и перевод. Мне...

HashMap
Доброго времени суток. Есть класс import java.util.Map; import java.util.List; import...

Работа с HashMap
Привет. столкнулся с такой трудностью. есть некий HashMap c ключом Date и объектом . в объекте есть...

3
Welemir1
Автоматизируй это!
2364 / 1468 / 505
Регистрация: 30.03.2015
Сообщений: 5,411
07.04.2019, 08:57 2
Цитата Сообщение от Secundum Посмотреть сообщение
orders.put(ld, currentOrder);
в 10 строке с каждым новым заказом ты перезаписываешь старое значение! а по идее ты должен у ордерс спросить нет ли уже ключа с текущей датой, если есть то взять по этому ключу мапу Map<Integer, OrderDTO> и добавит туда новый заказ. А у тебя логика метода совсем другая - хранит только последний заказ

Что с освоением дебаггера у тебя?
1
ArtemFM
738 / 485 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
07.04.2019, 12:09 3
Лучший ответ Сообщение было отмечено Secundum как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public OrderDTO addOrder(OrderDTO order)  { //информация о заказе передается через другой пакет
        if (order != null && order.getLd() != null) {
            order.setOrderN(this.counter++);
            LocalDate ld = order.getLd();
            if (!this.orders.containsKey(ld)) {
                this.orders.put(ld, new HashMap<>());
            }
            Map<Integer, OrderDTO> current = this.orders.get(ld);
            if (!current.containsKey(order.getOrderN())) {
                current.put(order.getOrderN(), order);
            }
        }
        return order; //возращаем заказ, когда взращаешь orders HashMap тоже сохраняется только последний заказ
    }
1
Secundum
1 / 1 / 0
Регистрация: 29.09.2013
Сообщений: 27
12.04.2019, 07:02  [ТС] 4
Цитата Сообщение от ArtemFM Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public OrderDTO addOrder(OrderDTO order)  { //информация о заказе передается через другой пакет
        if (order != null && order.getLd() != null) {
            order.setOrderN(this.counter++);
            LocalDate ld = order.getLd();
            if (!this.orders.containsKey(ld)) {
                this.orders.put(ld, new HashMap<>());
            }
            Map<Integer, OrderDTO> current = this.orders.get(ld);
            if (!current.containsKey(order.getOrderN())) {
                current.put(order.getOrderN(), order);
            }
        }
        return order; //возращаем заказ, когда взращаешь orders HashMap тоже сохраняется только последний заказ
    }
большое спасибо, ArtemFM!!! Все работает теперь!!! Понятно в чем была ошибка

Добавлено через 2 минуты
Спасибо, Welemir1!!!
Не знаю как работать с дебагером. Спасибо за ссылку, почитаю и посмотрю видео на ютюб что б разобраться в этом
0
12.04.2019, 07:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2019, 07:02

Java HashMap
Структура данных - HashMap

JAXB, HashMap
Здравствуйте, подскажите каким образом можно с помощью JAXB получить следующий xml. &lt;hashMapKey1...

Удаление из HashMap
Подскажите способ чтобы удалить из трёх HashMap's обьекты с одинаковыми значениями(values)? В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.