如何迭代次数比java中list的指定大小多

时间:2015-03-11 11:58:51

标签: java list iteration

我有一个类类型列表,它按以下方式保存类类对象的值

public  List<Vacc_vs6> refarray_vac1(String fdate,String ldate) throws SQLException, ParseException {
    st_jsp.clear();
    try {  
        con = getConnection();
        stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
        String vs1 = "sql query";
        stmt.executeQuery(vs1);
        rs = stmt.getResultSet();

        while (rs.next()) {
            Vacc_vs6 ref = new Vacc_vs6();

            ref.setLogtime(rs.getString(1));
            ref.setBeam_current(rs.getString(2));
            ref.setBeam_energy(rs.getString(3));
            ref.setst4_vs6_bag1_rb(rs.getString(4));
            ref.setst4_vs6_bag2_rb(rs.getString(5));
            ref.setst4_vs6_bag3_rb(rs.getString(6));
            ref.setst4_vs6_bag4_rb(rs.getString(7));
            ref.setst4_vs6_bag5_rb(rs.getString(8));
            ref.setst4_vs6_bag6_rb(rs.getString(9));
            ref.setst4_vs6_bag7_rb(rs.getString(10));
            ref.setst4_vs6_bag8_rb(rs.getString(11));
            ref.setst4_vs6_bag9_rb(rs.getString(12));
            st_jsp.add(ref);                  
        }
    } catch (Exception e) {
        System.out.println("\nException in refarray_vac1 " + e);
    }          
    return st_jsp;
}

st_jsp是列表。 现在我拿另一个类类型列表,并希望在列表st_jsp的每一列对应的值中添加值。我还想在第二个列表中只添加满足给定if条件的那些值,否则转到else并在特定列中放置null。 为此,代码是 -

List<Vacc_vs6> new_list=new ArrayList<Vacc_vs6>();
double is = 9.5;
double js = 10.5;
int no=0;
for (no=0;no<st_jsp.size();no++) {
    String i= st_jsp.get(no).getBeam_current();
    double im = Double.parseDouble(i) ;
    if(im>is && im<js) {
        new_list.addAll(st_jsp);
    } else  {
        new_list.addAll(null);
    }
    is +=10;js +=10; 
}
  1. 问题-1 - &gt; 如何在new_list.addAll(???)中添加与该索引对应的所有12列;我必须在我放的地方添加列吗?

    ref.setLogtime(rs.getString(1)); ref.setBeam_current(rs.getString(2));

  2. 问题-2 for(no=0;no<st_jsp.size();no++)循环将持续到st_jsp的大小,但如果我这样做,那么st_jsp列表的所有值都不会因为else条件而显示,因为我必须将0null添加到那些不满足上述条件的行中。该怎么做?

1 个答案:

答案 0 :(得分:1)

  

1问题-1 - &gt; **如何在new_list.addAll(???)中添加与该索引对应的所有12列; **我是否必须在我放的位置添加列?

要仅将满足条件的对象添加到新列表中,您应该执行以下操作:

if (im > is && im < js) {
    new_list.add(st_jsp.get(no));
}

方法addAll()将一个集合中的所有元素添加到另一个集合中。因此,当您这样做时,第一次满足您的条件时,您将st_jsp中的每个参考添加到new_list。然后,每次调用new_list.addAll(st_jsp)时,您都会继续重新添加元素。使用add()将只添加您想要的对象。

  

2)问题-2 for(no=0;no<st_jsp.size();no++)循环将持续到st_jsp的大小,但如果我这样做,那么st_jsp列表的所有值将不会显示,因为其他条件为I如果条件不满足上述那些行,请添加0null。如何做到这一点

在满足else条件时,您正在if执行相同操作,即将st_jsp中的所有元素添加到new_list:< / p>

if (im > is && im < js) {
    new_list.addAll(st_jsp);
} else {
    new_list.addAll(st_jsp);
}

这意味着,在您的循环播放后,您将在st_jsp.size()中以st_jspnew_list份副本结束。

如果您需要在new_list的所有字段中将包含null的对象添加到st_jsp,每当对象不满足您的条件时,您首先需要创建此对象,然后在不满足条件时添加它。此外,如果您需要测试is中每个元素是否满足jsfor的所有值的条件,则需要在List<Vacc_vs6> new_list = new ArrayList<Vacc_vs6>(); for (int no=0; no < st_jsp.size(); no++) { double is = 9.5; double js = 10.5; double im = Double.parseDouble(st_jsp.get(no).getBeam_current()); // flag to check if an element was added to new_list boolean added = false; while (is < 209.9 && js < 210.5) { if (im > is && im < js) { new_list.add(st_jsp.get(no)); added = true; break; } is += 10; js += 10; } if (!added) { // If the element was not added, add an empty object, // assuming that no field is set when creating the object. new_list.add(new Vacc_vs6()); } } 内放置另一个循环循环。

{{1}}