首页 > 解决方案 > 基于集合java的字段复制集合中的元素

问题描述

ProductionOrder我有一个包含五个字段(String ID、i nt Quantity、、、、i )的类的数组列表(orderlist),int Frequency_max这些字段由一个 excel 文件填充,因此集合的每个元素都是一个 excel 行。int Frequency_averagent Frequency_min

excel的每一行代表订单的ID,有数量和频率。

例如:

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)?

之后,我需要为每个重复的 ID 分配一个基于三角形分布的随机值,在频率列中设置最大值、平均值和最小值。我该怎么做?

谢谢

标签: javaarraylistduplicatesdistributionanylogic

解决方案


对于您的第一个问题,您可以执行以下操作:

  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]);
  1. 如果字段已存储在集合中:
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));

对于您的第二个问题,请查看 Tunaki 在此处发布的答案:

   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));
        }

    }

推荐阅读