嘿伙计们无法迭代或从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) {
}
但我收到了错误。
答案 0 :(得分:2)
答案 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接口。