无法从itemSet迭代项目

时间:2012-08-31 19:11:41

标签: java

嘿伙计们无法迭代或从ItemSet获取项目以下是我的代码

项目类

public class Item {

    private String id; 
    private int count;
    private String  name;

    public int getcount() {
       return this.count; 
    }

    public Item(String name) {
        this.name=name;
        this.id = "";
    }

    public Item(String id, String name) {
        this.name=name;
        this.id=id;
    }

    public Item(int count) {
        this.count=count;
    }

    public String getItemName() {
        return this.name;
    }

    public String getItemId() {
        return this.id;
    }

    public Item returnItems(ItemSet itemset) {
        Item item=null;
        return item;
    }

}

ItemSet类包含项目列表

public  class ItemSet   {

    private List<Item> hold;

    ItemSet(Item item) {
        hold = new ArrayList<Item>();
        this.hold.add(item); 
    }

    ItemSet() {
        //throw new UnsupportedOperationException("Not yet implemented");
    }   

    public List<Item> getItemSet() {
        return this.hold;
    }    

    public void addItems(Item item) {
        hold = new ArrayList<Item>();
        this.hold.add(item);
    }

}

这是我的Transaction类保存ItemSets列表

public class Transaction  {

    private List<ItemSet> trans;

    public ItemSet getUniqueItem() {
        ResultSet rs;
        Database d=new Database();
        ItemSet unique=new ItemSet();
        String query="Select id,name from item";
        rs=d.sendQuery(query);
        try{  
            while(rs.next()) {
                System.out.println(rs.getString(1)+"\t"+rs.getString(2));
                Item item=new Item(rs.getString(1),rs.getString(2));
                unique.addItems(item);      
            } 
        } catch(Exception e) { 
            System.out.print(e.getMessage());
        }
        return unique;
    }

}

这是我的主要课程

public class Ap {

    public static void main(String args[]) {
        Transaction t=new Transaction();
        Transaction Ci=new Transaction();
        Transaction Li=new Transaction();

        ItemSet I=t.getUniqueItem();    //11
    }
}

我不知道如何从ItemSet获取物品11

我尝试使用

foreach(Item i:I) {

}

但我收到了错误。

4 个答案:

答案 0 :(得分:2)

为了使用'foreach'语句,您的ItemSet类应该实现java.lang.Iterable接口

更新:

请参阅此SO answer,了解如何实现Iterable接口

答案 1 :(得分:2)

为了能够使用for (Item i : itemSet),您的ItemSet类必须实现iterable接口。您可以通过将以下方法添加到ItemSet类来完成此操作:

public Iterator<Item> iterator() {
    return hold.iterator();
}

请记住,您应该在类声明中添加implements Iterable<Item>

请注意,您始终可以使用for (Item i : itemSet.getItemSet())

答案 2 :(得分:0)

getUniqueItem()类中的Transaction方法返回ItemSet,但未实现Iterable接口,因此您不应期望能够迭代它。您需要通过调用List<Item>ItemSet获取getItemSet()并对其进行迭代。

顺便说一句,getItemSet()可能不是该方法的好名字,因为它返回List<Item>

答案 3 :(得分:0)

我认为你的代码没有多大意义,我真的不明白为什么每个人都想实现Iterator接口。

首先,对包含List的类使用名称Set。 然后在 addItems()方法中重新创建List的新实例,该方法应该是 addItem(),因为您要将单个项目添加到列表中。

您正在做的事情基本上是制作一个列表并向其添加一个项目,但是您添加的下一个项目会重新创建列表,并将其引用分配给上一个列表的引用,从而有效地删除它。 所以你的列表永远不会包含超过1个项目。

如果你想让一个列表作为一个类的属性,那么你可以直观地看到类的名称,比如 ItemList ,因为它告诉你你有一个项目列表和这正是它的本质。 但是如果它只包含一个列表,那么实际上根本不需要它,因为你唯一要做的就是在它们之间添加一个方法调用。您可以使用List接口或任何实现它的类,例如ArrayList。

我拿了你的代码并重写它就像它有意义一样。 我希望它可以帮助你;)

public class Transaction  {

    public ItemList getUniqueItems() {

        Database d = new Database();
        ItemList unique = new ItemList();
        String query="Select id,name from item";
        ResultSet rs = d.sendQuery(query);
        try {  
            while(rs.next()) {
                System.out.println(rs.getString(1)+"\t"+rs.getString(2));
                unique.addItem(new Item(rs.getString(1),rs.getString(2)));      
            } 
        }
        catch(Exception e){
            System.out.print(e.getMessage());
        }
        return unique;
    }

}

public class Ap {

    public static void main(String args[]) {
        Transaction t  = new Transaction();

        ItemList i = t.getUniqueItems();  
        List<Item> list = i.getItemList();
        list.get(10);    //11 because 0 counts also
    }
}

较短的版本是: 1:Transation类

public class Transaction  {

    public List<Item> getUniqueItems() {

        Database d = new Database();
        List<Item> unique = new ArrayList<Item>();

        String query="Select id,name from item";
        ResultSet rs = d.sendQuery(query);
        try {  
            while(rs.next()) {
                System.out.println(rs.getString(1)+"\t"+rs.getString(2));
                unique.add(new Item(rs.getString(1),rs.getString(2)));      
            } 
        }
        catch(Exception e){
            System.out.print(e.getMessage());
        }
        return unique;
    }

}

2:Ap类:

public class Ap {

    public static void main(String args[]) {
        Transaction t  = new Transaction();
        List<Item> list = t.getUniqueItems();
        list.get(10);    //11 because 0 counts also

                // iteration with a foreach loop
                for (Item i : list) {
                   System.out.println(i);
                }

                // iteration with a for loop 
                for (int n = 0, s = list.size(); n < s; n++) {
                    System.out.println(list.get(n));
                }

                // iteration with a Iterator
                Iterator<Item> iterator = list.iterator();
                while (i.hasNext()) {
                    System.out.println(i.next());
                }
    }
}

因此完全没有必要在任何地方实现Iterator接口。