【问题标题】:iterating over the list which is of object type遍历对象类型的列表
【发布时间】: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;
        }
    }

【问题讨论】:

标签: java list map


【解决方案1】:

我假设您只需要遍历列表并计数到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 是否大于当前值。

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2011-08-19
    • 2018-05-08
    • 2015-03-17
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多