我有一个休眠的方法,我通过它接收列表,如下所示..
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,所以这个除法参数需要是可配置的
所以最后我想创建另一个字符串类型的map,这样min和max在该列表中的类型为string,并以这种方式存储,如下所示..
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;
}
}
答案 0 :(得分:0)
我假设您只需要迭代列表并计算到BARRIER
并找到该桶中的最小值和最大值。如果是,则不是knapsack
。
int sum = 0;
int min = 0;
int max = 0;
for (abcObject obj: aaList) {
int tId = obj.getT_id();
if (sum == 0) {
//start over, remember min
min = tId;
max = min;
}
//add value to sum
sum += obj.getValue();
min = tId < min ? tId : min; //check if tId is lesser than min
max = tId > max ? tId : max; //check if tId is greater than max
if (sum >= BARRIER) {
//now we need to start again, remember what we got
minMaxs.add(new abcObject(min, max));
//reset
min = 0;
max = min;
sum = 0;
}
}
上述方法应该有效。我们在这里所做的只是比较min
是否小于当前值,max
是否大于当前值。