0

嘿,伙计们无法迭代或从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
    }
}

我不知道如何在 11 时从 ItemSet 中获取项目

我尝试使用

foreach(Item i:I) {

}

但我收到错误。

4

4 回答 4

2

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

更新:

看到这个关于如何实现 Iterable 接口的答案

于 2012-08-31T19:17:18.690 回答
2

为了能够使用for (Item i : itemSet),您的ItemSet类必须实现可迭代接口。您可以通过将以下方法添加到ItemSet类来做到这一点:

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

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

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

于 2012-08-31T19:18:41.543 回答
0

getUniqueItem()你的类中的方法Transaction返回一个ItemSet没有实现Iterable接口的方法,所以你不应该期望能够迭代它。您需要通过调用并迭代它来List<Item>获取。ItemSetgetItemSet()

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

于 2012-08-31T19:19:44.623 回答
0

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

首先,您为包含列表的类使用名称 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 接口。

于 2012-08-31T19:31:08.580 回答