дублирующие элементы в коллекции на основе поля коллекции java - PullRequest
1 голос
/ 24 апреля 2020

У меня есть массив (список заказов) класса ProductionOrder с пятью полями (String ID, i nt Quantity, int Frequency_max, int Frequency_average, i nt Frequency_min), которые заполняются файлом Excel так, Каждый элемент коллекции представляет собой строку Excel.

Каждая строка Excel представляет идентификатор заказа и имеет количество и частоту.

например:

ID            Quantity     Frequency_max       Frequency_average        Frequency_min
123FD99         2            12                 5                        2
14ZY201         4            59                 18                       1
...

Мне нужно продублировать количество элементов в коллекция основана на поле количества самой коллекции, поэтому результат должен выглядеть следующим образом:

ID           Frequency_max        Frequency_average        Frequency_min
14ZY201        59                    18                       1
14ZY201        59                    18                       1
14ZY201        59                    18                       1
14ZY201        59                    18                       1
123FD99        12                    5                        2
123FD99        12                    5                        2

Как я могу это сделать? Можно ли также выполнить эту операцию перед заполнением элементов в коллекции (ps. Я использую Apache POI для Excel)?

После этого мне нужно назначить каждому дублированный идентификатор случайное значение, основанное на распределении tri angular, с максимальным, средним и минимальным значением, установленным в столбцах частоты. Как я могу это сделать?

Спасибо

1 Ответ

0 голосов
/ 24 апреля 2020

Для вашего первого выпуска вы можете сделать что-то вроде этого:

  1. Если поля в настоящий момент хранятся в другом массиве (или коллекции):
for (int i = 0; i < fields.length; i++) // Iterate through all fields
    for (int j = 0 ; j < fields[i].getQuantity(); j++)
        list.add(fields[i]);
Если поля уже сохранены в коллекции:
for (int i = 0; i < fields.size(); i++) // Iterate through all fields
    for (int j = 0 ; j < fields.get(i).getQuantity() - 1; j++)
        list.add(fields.get(i));

Для вашего второго выпуска посмотрите ответ, опубликованный Тунаки в здесь :

   public double triangularDistribution(double a, double b, double c) {
        double F = (c - a) / (b - a);
        double rand = Math.random();
        if (rand < F) {
            return a + Math.sqrt(rand * (b - a) * (c - a));
        } else {
            return b - Math.sqrt((1 - rand) * (b - a) * (b - c));
        }

    }
...