基于集合java的字段复制集合中的元素

Posted

技术标签:

【中文标题】基于集合java的字段复制集合中的元素【英文标题】:duplicating elements in an collection based on a field of the collection java 【发布时间】:2020-08-08 09:28:18 【问题描述】:

我有一个 ProductionOrder 类的数组列表(订单列表),其中包含五个字段(String ID、int Quantityint Frequency_maxint Frequency_average、int Frequency_min),它们由一个 excel 文件填充,所以集合的每个元素都是一个 excel 行。

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 分配一个基于三角形分布的随机值,在频率列中设置最大值、平均值和最小值。我该怎么做?

谢谢

【问题讨论】:

【参考方案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));

关于您的第二期,请看图纳基在here 中发布的答案:

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

    

【讨论】:

非常感谢,我将使用第二种方法。所以这里的字段并不意味着集合对吗?它是我在数组列表中的字段的计数吗?什么是 getQuantity()?我没有从编译器中得到它。你能解释得更好吗? fields 是包含您已从文件中读取的前五个字段的集合(或数组)。你的 ArrayList 包含什么类型的对象?我认为它是您为保存字段而创建的某个对象,这样它就可以有一个名为 getQuantity() 的方法 太棒了!听起来很有趣 好的,知道了。我创建了一个自定义类(名为 Exceller),其中包含 5 个字段(如上所述),它允许我存储 excel 文件的确切格式和行,因此 arraylist 的类型为 。它存储生产订单。我必须以这种方式添加getQuantity方法吗? public int getQuantity() 返回数量; ?? 您也可以将数量定义为公开,并定期访问。哪个更方便

以上是关于基于集合java的字段复制集合中的元素的主要内容,如果未能解决你的问题,请参考以下文章

Java中EnumSet的copyOf()方法: Java.util.EnumSet.copyOf()

java集合类

转载---Java集合对象的深度复制与普通复制

作业09-集合与泛型

201621123054《Java程序设计》第九周学习总结

201621123048《Java程序设计》第九周学习总结