2015-10-14 24 views
2

我想打印出嵌套的ArrayList。作为Java初学者,我无法在循环中做到这一点。 我的第二个问题是找出嵌套的ArrayList-Objects的大小。 “.size()”不起作用。如何打印出嵌套的Arraylist对象并确定它们的大小

在此先感谢。

这里是我的代码:

package java_lernen; 

import java.util.*; 

public class Java_lernen { 

    public static void main(String[] args) { 

     Dataset ds = new Dataset(); 
     List<Dataset> db = new ArrayList<>(); 

     ds.setName("Hans"); 
     ds.setItem("Hans_one"); 
     ds.setItem("Hans_two"); 
     db.add(ds); 

     ds.setName("Helga"); 
     ds.setItem("Helga_one"); 
     ds.setItem("Helga_two"); 
     ds.setItem("Helga_three"); 
     db.add(ds); 

     System.out.println(db.size()); // size of database 

     System.out.println(db.get(0).getItem(0)); 
     System.out.println(db.get(0).getItem(1)); 
     System.out.println(db.get(0).getItem(2)); 
     // Q1: How can i do this (above) in a loop? 

     /* pseudo-code, because i have no idea how to do that! 

     for (??? elem: Dataset){ 
      sout (size of dataset) 
     } 
     */ 
     //Q2: How to find out the size of the nested Arraylist(s) 
     //.size() doesn't seem to work 
    } 
} 

而且

class Dataset { 

    private String name; 
    final ArrayList<String> arrayItem; 

    public Dataset() { 
     arrayItem = new ArrayList<>(); 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String _name) { 
     this.name = _name; 
    } 

    public void setItem(String _item) { 
     arrayItem.add(_item); 
    } 

    public String getItem(int _nr) { 
     String s = arrayItem.get(_nr); 
     return s; 
    } 

} 

回答

0

你有一个非常误导的星座。但是,每个循环看起来像这样

for(DataSet dataSet : db){ 
    System.out.println(dataSet.arrayItem.size()); 
    for(String s : dataSet.arrayItem){ 
     System.out.println(s); 
    } 
} 
0

添加一个新的方法在你所谓的getSize

public int getSize(){ 
return arrayItem.size(); 
} 
+0

有时解决方案是那么明显,你只见树木不见森林。谢谢 –

+0

您的欢迎:D – zawhtut

0

DataSet类可以在DataSet类为添加一个方法getArrayItem()而不是使用的dataSet.arrayItem直接并可以使用@Murat K.建议的代码。

它看起来像下面那样。

public List<String> getArrayItem(){ 
    return arrayItem; 
} 

而且,所需的代码将通过以下修改:

for(DataSet dataSet : db){ 
    System.out.println(dataSet.getArrayItem().size()); 
     for(String s : dataSet.getArrayItem()){ 
      System.out.println(s); 
     } 
} 

希望这会有所帮助。

0

在您的Dataset类中添加一个Collectionarray作为成员。

class Dataset<E> { 

    private List<E> items; 

    public Dataset() { 
     items = new ArrayList<>(); 
    } 

    public List<E> getItems() { 
     return this.items; 
    } 

    // ... other members and getter/setters 
} 

代码进行迭代,并得到大小

Dataset<Integer> dataSet = new Dataset<>(); 
    for (Integer in : dataSet.getItems()) { 
     //Iterate 
    } 
    System.out.println("Size " + dataSet.getItems().size()); 
0

下面是你需要的完整代码。

package stackOverFlow; 

import java.util.*; 

public class Java_lernen { 

public static void main(String[] args) { 

    Dataset ds = new Dataset(); 
    Dataset ds1 = new Dataset(); 
    List<Dataset> db = new ArrayList<Dataset>(); 

    ds.setName("Hans"); 
    ds.setItem("Hans_one"); 
    ds.setItem("Hans_two"); 
    db.add(ds); 

    ds1.setName("Helga"); 
    ds1.setItem("Helga_one"); 
    ds1.setItem("Helga_two"); 
    ds1.setItem("Helga_three"); 
    db.add(ds1); 

    System.out.println(db.size()); // size of database 

    // Q1: How can i do this (above) in a loop? 

    /* pseudo-code, because i have no idea how to do that! 


    */ 

    for (Dataset dss : db) { 
     System.out.println(dss.getName()); 
     for (int i = 0; i < dss.getSizeDataset(); i++) { 
      System.out.println("\t" + dss.getItem(i)); 
     } 
    } 

    //Q2: How to find out the size of the nested Arraylist(s) 
    System.out.println(db.get(0).getSizeDataset()); 
    System.out.println(db.get(1).getSizeDataset()); 

} 

}

class Dataset { 

private String name; 
final ArrayList<String> arrayItem; 

public Dataset() { 
    arrayItem = new ArrayList<String>(); 
} 

public String getName() { 
    return name; 
} 

public void setName(String _name) { 
    this.name = _name; 
} 

public void setItem(String _item) { 
    arrayItem.add(_item); 
} 

public String getItem(int _nr) { 
    String s = arrayItem.get(_nr); 
    return s; 
} 

public int getSizeDataset() { 
    return arrayItem.size(); 
} 

} 
+0

您可以解释您的答案,以便更好地了解您的代码如何帮助解决问题 –

+0

您是否发现使用ds = new Dataset()的缺点?而不是宣布另一个数据集? (Dataset ds = new Dataset(); Dataset ds1 = new Dataset(); –

+0

当我们不断更新ds对象时,名称将被覆盖在现有名称上,新项目将被添加到旧列表中。 )name1,item1,item2 SET-2)name2,item1-1,item1-2然后如果我们只使用一个ds,那么输出将是name2,item1,item2,item1-1,item1-2。这里的要求是列表清单。所以我们可以认为这个清单总是新的。 –

相关问题