java - 基于集合java的字段复制集合中的元素
问题描述
ProductionOrder
我有一个包含五个字段(String ID
、i nt Quantity
、、、、i )的类的数组列表(orderlist),int Frequency_max
这些字段由一个 excel 文件填充,因此集合的每个元素都是一个 excel 行。int Frequency_average
nt 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 分配一个基于三角形分布的随机值,在频率列中设置最大值、平均值和最小值。我该怎么做?
谢谢
解决方案
对于您的第一个问题,您可以执行以下操作:
- 如果字段当前存储在另一个数组(或集合)中:
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));
对于您的第二个问题,请查看 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)); } }
推荐阅读
- java - 如何在app中使用当前时间根据当前时间做出一个动作(从数据库中删除数据)
- c++ - 黑客等级极小极大问题,最大和给出错误的负值
- docker - 为什么 docker 的卷主机文件夹为空
- mongodb - 如何使用 MongoDB .NET 驱动程序查询索引访问计数?
- javascript - Javascript:用于包含多种类型的列表中的列表项的流类型
- c# - 如何将条目添加到 IIS 虚拟目录的配置
- xml - 使用 XPath 更新 Android Manifest 中的 versionCode
- javascript - 我可以使用函数更改输入标签的最大属性吗?
- php - 为什么我的 sql select 语句在数据库中选择多行时返回空值?
- wpf - 如果我的 ObservableCollection 在构造时未初始化,为什么它不会在更改时更新 UI?