Java 在列表上动态迭代

Java 在列表上动态迭代,java,arrays,list,collections,Java,Arrays,List,Collections,我有一个如下所示的方法: List<AbcObject> aaList= session.createCriteria(AbcObject.class) 我必须迭代列表,这样如果值的运行总数达到100,那么一个元素将添加到另一个列表中,如下所示: min max 11 15 18 45 请注意,进行除法的100值需要可配置 第一个元素本身的值也可能是100。在这种情况下,min和max将具有相同的值 我提出了以下方法: final int BARRIE

我有一个如下所示的方法:

List<AbcObject> aaList= session.createCriteria(AbcObject.class)
我必须迭代列表,这样如果
值的运行总数达到100,那么一个元素将添加到另一个列表中,如下所示:

min     max
11      15
18      45
请注意,进行除法的
100
值需要可配置

第一个元素本身的值也可能是100。在这种情况下,
min
max
将具有相同的值

我提出了以下方法:

final int BARRIER = 100;

//I am going to assume there are getter methods in your AbcObject and 
//that all values are greater than 0
List<int[]> minMaxs = new List<int[]>();
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 int[]{min, obj.getT_id()});
        //reset
        min = 0;
        sum = 0;
    }
}
final int BARRIER=100;
//我将假设在你的卑鄙和愚蠢中有getter方法
//所有值都大于0
List minMaxs=新列表();
整数和=0;
int min=0;
对于(卑鄙的对象:aaList){
如果(总和=0){
//重新开始,记得吗
min=obj.getT_id();
}
//增值
sum+=obj.getValue();
如果(总和>=屏障){
//现在我们需要重新开始,记住我们得到了什么
add(newint[]{min,obj.getT_id()});
//重置
最小值=0;
总和=0;
}
}
我发现的另一种方法是:

final int BARRIER = 100;

//I am going to assume there are getter methods in your 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;
    }
}
final int BARRIER=100;
//我将假设在你的卑鄙和愚蠢中有getter方法
//所有值都大于0
List minMaxs=新列表();
整数和=0;
int min=0;
对于(卑鄙的对象:aaList){
如果(总和=0){
//重新开始,记得吗
min=obj.getT_id();
}
//增值
sum+=obj.getValue();
如果(总和>=屏障){
//现在我们需要重新开始,记住我们得到了什么
add(新的AbcObject(min,obj.getT_id());
//重置
最小值=0;
总和=0;
}
}

有更好的方法吗?

您的代码看起来非常合理且易于理解。我看不出迫切需要更改。

这两个代码块看起来非常相似…@keuleJ第一个使用
int[]
,第二个使用
abcObject
。朋友们,我同意这两个代码块之间没有太大的区别,但关键是我可以采用什么其他策略,哪种策略会更好。
final int BARRIER = 100;

//I am going to assume there are getter methods in your 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;
    }
}