Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 15

Map коллекции JAVA

28.10.2017, 13:36. Показов 2391. Ответов 4

Студворк — интернет-сервис помощи студентам
Доброго времени суток) суть задания - есть класс Goods(в нем есть название товара, тип, цена за ед., дата производства и дата, когда товар становится просрочен) нужно также организовать класс Warehouse, где с помощью map создать склад всех товаров. у меня вроде би получилось реализовать с помощью ListArray, а вот как переделать с map - не совсем понимаю. заранее спасибо за помощь)
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
public class WarehouseMap {
 String responsibleForWarehouse;
    String address;
//вот так, если с ArrayList
//  ArrayList<Goods> goodsArray = new ArrayList<>();
//        public void addGoods(Goods good) {
//     this.goodsArray.add(good);
//  }
 
//  public void removeGoods(String name) {
//      this.goodsArray.remove(name);
//  }
 
//но как, если с map?
    Map<Integer, String> goodsArray = new HashMap<Integer, String>();
    public void addGoods(Goods good) {
    
        this.goodsArray.putAll((Map<? extends Integer, ? extends String>) good);
    }
 
    public void removeGoods(Goods good) {
        this.goodsArray.remove((Map<? extends Integer, ? extends String>) good);
    }
 
//например, метод, возвращ. сумму цен всех товаров
    public static  double priceOfAllItems(Goods goods) {
        double totalSum = 0;
        for (Goods tmpGoods : goodsArray) {
            totalSum += tmpGoods.getPrice();
        }
 
        return totalSum;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.10.2017, 13:36
Ответы с готовыми решениями:

Xsd scheme - коллекции map и set
Парни, нужна помощь, как в xsd схеме написать map или set коллекцию. Нигде не смог найти, может подскажите?

Как в коллекции map пройтись от конца до определенного элемента?
Например есть такой код public ArrayList&lt;String &gt; userMessageStore = new ArrayList&lt;&gt;(); И мне нудно вывести с конца скажем...

Чтение теста из файлов в Java. java коллекции, потоки. создать приложение, в котором будет два отдельных потока
Создайте два текстовых файла с именами, например, countries.txt и capitals.txt. В первом файле должны быть перечислены названия стран,...

4
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
28.10.2017, 14:21
Лучший ответ Сообщение было отмечено qwertyush как решение

Решение

Map(String, Goods) -> add() -> map.put(Goods.name, Goods) Но надо учесть, что дубликатов по ключу map не хранит. если допустим добавить туда map.put(1, 2) затем map.put(1, 3) в коллекции будет 1, 3 т.к. дубль он перезатирёт новым

Добавлено через 10 минут
что-то типа такого:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
 
public class WareHouses {
    Map<String, Goods> base = new HashMap<>();
    
    public int countGoods() {
        return this.base.size();
    }
    
    public Goods addGoods(Goods goods) {
        return this.base.put(goods.getName(), goods);
    }
    
    public Goods deleteGoods(String name) {
        return this.base.remove(name);
    }
 
    @Override
    public String toString() {
        return this.base.toString();
    }
}
 
class Goods {
    private String name;
    private String type;
    private float price;
    private Date makeDate;
    private Date badDate;
 
    public String getName() {
        return name;
    }
 
    public String getType() {
        return type;
    }
 
    public float getPrice() {
        return price;
    }
 
    public Date getMakeDate() {
        return makeDate;
    }
 
    public Date getBadDate() {
        return badDate;
    }
 
    public Goods(String name, String type, float price, Date makeDate, Date badDate) {
        this.name = name;
        this.type = type;
        this.price = price;
        this.makeDate = makeDate;
        this.badDate = badDate;
    }
}
Добавлено через 27 минут
метод суммы всех цен:

use Lambda
Java
1
2
    public float sumAllGoods() {
        return this.base.values().stream().map(Goods::getPrice).reduce((x, y) -> x + y).get();
usally variant
Java
1
2
3
4
5
6
7
8
9
10
    
    public float sumAllGoods() {
       float result = 0;
        for (Goods goods : this.base.values()) {
           if (goods != null) {
               result += goods.getPrice();
           }
       }
       return result;
    }
1
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 15
29.10.2017, 12:59  [ТС]
спасибо большущее) вот еще вопрос, если Вам не очень сложно. допустим, есть метод, возвращающий кол-во товаров конкретного типа.
Java
1
2
3
4
5
6
7
8
9
    public int amountOfItemsForMoney(String desiredType, double am_money) {
            int am = 0;
            for (Goods goods : this.base.values()) {
                if ((goods != null)&&(goods.getType().equals(desiredType))) {
                    am = (int) ((int) am_money / goods.getPrice());
                }
            }
            return am;
        }
для все методов нужно писать юнит тест (TestNG), и тут у меня проблема
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
    @Test(dataProvider = "amountOfItemsForMoneyProvider")
    public void amountOfItemsForMoneyTest( String desiredType, double am_money, int expected) {
        assertEquals( expected, WarehouseMap.amountOfItemsForMoney(desiredType, am_money));
    }
 
    @DataProvider
    public Object[][] amountOfItemsForMoneyProvider() {
        return new Object[][] {
            {new Goods("Skiper", "Pencil", 5.67, LocalDate.of(2016, 7, 8), LocalDate.of(2017, 6, 5)), 36.99,6 }
            
 
        };
    }
аналогично не понимаю, как проверять метод, возвращающий несколько значений
Java
1
2
3
4
5
6
7
8
9
10
11
12
public Map<String, Goods> similarItems(String type) {
        //  int am = 0;
            Map<String, Goods> similarItems = new HashMap<>();
            for (Goods goods :  this.base.values()) {
                if (goods.getType().equals(type)) {
                    //am += 1;
                    similarItems.put(goods.getName(), goods);
                }
            }
 
            return similarItems;
        }
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
29.10.2017, 15:24
Лучший ответ Сообщение было отмечено qwertyush как решение

Решение

Ща попробуем помочь

Добавлено через 23 минуты
JUnit test
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class WareHousesTest {
    @Test
    public void whenCheckCountGoodsByType() throws Exception {
        WareHouses base = new WareHouses();
        double money = 10.0f;
        String typeOne = "First";
        String typeTwo = "Second";
 
        String resultOne = "{One=10, Two=5}";
        String resultTwo = "{Four=2, Three=3}";
 
        base.addGoods(new Goods("One", "First", 1.0f, null, null));
        base.addGoods(new Goods("Two", "First", 2.0f, null, null));
        base.addGoods(new Goods("Three", "Second", 3.0f, null, null));
        base.addGoods(new Goods("Four", "Second", 4.0f, null, null));
 
        assertThat(base.getCountGoodsByType(typeOne, money), is(resultOne));
        assertThat(base.getCountGoodsByType(typeTwo, money), is(resultTwo));
    }
 
}
Добавлено через 49 секунд
метод:
Java
1
2
3
4
5
6
7
8
9
10
11
public Map<String, Integer> getCountGoodsByType(String type, double money) {
        Map<String, Integer> goods = new HashMap<>();
        if (type != null && money > 0) {
            for (Goods good : this.base.values()) {
                if (good != null && type.equals(good.getType())) {
                    goods.put(good.getName(), (int) (money / good.getPrice()));
                }
            }
        }
        return goods;
    }
Добавлено через 7 минут
измени в строчках 17 и 18 на это:

assertThat(base.getCountGoodsByType(type One, money).toString, is(resultOne));
assertThat(base.getCountGoodsByType(type Two, money).toString, is(resultTwo));

хотя может и не потребуется

Добавлено через 7 минут
другой метод:
Java
1
2
3
4
5
6
7
8
9
10
11
 public List<Goods> similarItems(String type) {
        List<Goods> result = new ArrayList<>();
        if (type != null) {
            for (Goods goods : this.base.values()) {
                if (goods != null && type.equals(goods.getType())) {
                   result.add(goods);
                }
            }
        }
        return result;
    }
Добавлено через 6 минут
тест типа того:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Test
    public void whenCheckGoodsByType() throws Exception {
        WareHouses base = new WareHouses();
        
        String typeOne = "First";
        String typeTwo = "Second";
        
        Goods goodOne = new Goods("One", "First", 1.0f, null, null);
        Goods goodTwo = new Goods("Two", "First", 2.0f, null, null);
        Goods goodThree = new Goods("Three", "Second", 3.0f, null, null);
        Goods goodFour = new Goods("Four", "Second", 4.0f, null, null);
 
        base.addGoods(goodOne);
        base.addGoods(goodTwo);
        base.addGoods(goodThree);
        base.addGoods(goodFour);
 
        assertThat(base.similarItems(typeOne).contains(goodOne), is(true));
        assertThat(base.similarItems(typeOne).contains(goodTwo), is(true));
        assertThat(base.similarItems(typeTwo).contains(goodThree), is(true));
        assertThat(base.similarItems(typeTwo).contains(goodFour), is(true));
    }
0
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 15
30.10.2017, 22:13  [ТС]
спасииииииииибо)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2017, 22:13
Помогаю со студенческими работами здесь

Map интерфейс в Java
1. Учет товаров на складе Основной информационный объект: товар (код товара (уникален), название, ед. измерения, количество). Основные...

Java. Интерфейс Map
Добрый вечер! Есть готовый класс Device, необходимо выполнить сортировку по названию фирмы, с помощью интерфейса MAP. !!HELP! Помогите...

Работа с Map в java
Ребят, подскажите, пожалуйста.. У меня есть класс NotebookTxtMappedDb, в котором происходит работа с LinkedHashMap. В нем есть методы,...

Работа с Map Java 8
Кто-нибудь может подсказать как объединить, чтобы не требовалось создавать лист с ключами отдельно и потом пробегать через него, а сразу...

Коллекции java.util.*
Изучаю коллекции, стараюсь разобрать всё по полочкам и понять существенные различия между иными, запутался окончательно. Map'ы, Set'ы......


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru