基于集合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 Quantity
、int Frequency_max
、int 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 的类型为以上是关于基于集合java的字段复制集合中的元素的主要内容,如果未能解决你的问题,请参考以下文章