【发布时间】:2014-02-19 09:54:23
【问题描述】:
我有一种方法是休眠的,通过它我可以收到如下所示的列表..
List<abcObject> aaList= session.createCriteria(abcObject.class)
现在经过检查,我发现列表类型是对象类型,因为标准 api 返回我们对象类型的列表
现在收到的列表是按照以下方式..
t_id value
11 3
12 20
14 60
15 17 ------->(3+20+60+17 =100),here min =11 & max =15
18 40
22 20
33 40
45 20 ---------->(40+20+40+20 =100),here min =18 & max =45
现在请大家建议,因为我必须以这样的方式迭代列表,如果值的计数达到 100,那么应该创建一个单独的映射,哪个键将 是 min 和 value 将是 max ,现在地图是字符串类型的
min max
11 15
18 45
还需要注意,这个除法参数是 100 应该是可配置的,有时它也可以设置为 60,所以这个除法参数需要是可配置的
所以最后我想创建另一个字符串类型的映射,使得 min 和 max 在该列表中是字符串类型,并以这种方式存储,如下所示..
min max
11 15
18 45
请告知如何在 java 中实现这一点,因为列表是对象类型。
我已经尝试了一些这个但它不正确..
final int BARRIER = 100;
//I am going to assume there are getter methods in you abcObject and
//that all values are greater than 0
List<abcObject> minMaxs = new List<abcObject>();
int sum = 0;
int min = 0;
for (abcObject obj: aaList) {
if (sum == 0) {
//start over, remember min
min = obj.getT_id();
}
//add value to sum
sum += obj.getValue();
if (sum >= BARRIER) {
//now we need to start again, remember what we got
minMaxs.add(new abcObject(min, obj.getT_id()));
//reset
min = 0;
sum = 0;
}
}
【问题讨论】:
-
如果我理解正确,这是典型的knapsack problem。有很多实现示例可供查找。
-
@Andae 我已经在 google 中搜索过,但找不到确切的解决方案