迭代对象类型的列表

时间:2014-01-28 07:56:06

标签: java list map

我有一个休眠的方法,我通过它接收列表,如下所示..

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

1 个答案:

答案 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是否大于当前值。