Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用迭代器从Java中的两个类检索对象_Java_Arraylist_Collections_Iterator - Fatal编程技术网

如何使用迭代器从Java中的两个类检索对象

如何使用迭代器从Java中的两个类检索对象,java,arraylist,collections,iterator,Java,Arraylist,Collections,Iterator,我是Java新手,正在学习集合。我在使用迭代器从两个类对象中检索数据时遇到问题,我只能获取任何单个类的输出,而不能获取两个类的输出 这是我的代码: package ncl; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; public class Tes

我是Java新手,正在学习集合。我在使用
迭代器从两个类对象中检索数据时遇到问题,我只能获取任何单个类的输出,而不能获取两个类的输出

这是我的代码:

package ncl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;


public class Test {

public static void main(String[] args) {

    Market m1 = new Market(1234, "Suryam", 1200.10);
    Market m2 = new Market(4321, "SWathi", 1200.10);
    Market m3 = new Market(1111, "Chinna", 1200.10);
    Market m4 = new Market(2222, "Malli Bava", 1200.10);
    Market m5 = new Market(3333, "Vali", 1200.10);

    RetailShop rt1 = new RetailShop("Swathi", 8121720217l, 500087);
    RetailShop rt2 = new RetailShop("Tumbu", 9989330442l, 500087);
    RetailShop rt3 = new RetailShop("Suri Babu", 9010627821l, 500087);

    ArrayList<Object> al = new ArrayList<Object>();

    // Adding Market
    al.add(m1);
    al.add(m2);
    al.add(m3);
    al.add(m4);
    al.add(m5);

    // Adding RetailShop
    al.add(rt1);
    al.add(rt2);
    al.add(rt3);

    Iterator itr = al.iterator();

    while(itr.hasNext())
    {
        Market mt=(Market)itr.next();

            System.out.println(mt.billamount);
            System.out.println(mt.customer);
            System.out.println(mt.invoiceno);

        RetailShop rts=(RetailShop)itr.next();
        System.out.println(rts.custName);
    }
}
}
ncl包;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.SQLException;
导入java.util.ArrayList;
导入java.util.Iterator;
公开课考试{
公共静态void main(字符串[]args){
市场m1=新市场(1234,“Suryam”,1200.10);
市场m2=新市场(4321,“斯瓦提”,1200.10);
市场m3=新市场(1111,“中国”,1200.10);
市场m4=新市场(2222,“Malli Bava”,1200.10);
市场m5=新市场(3333,“Vali”,1200.10);
零售店rt1=新零售店(“Swathi”,812170217L,500087);
零售店rt2=新零售店(“Tumbu”,9989330442l,500087);
零售店rt3=新零售店(“苏里巴布”,9010627821l,500087);
ArrayList al=新的ArrayList();
//添加市场
加上(m1);
加总面积(m2);
al.添加(m3);
新增(m4);
al.添加(m5);
//添加零售店
al.add(rt1);
al.add(rt2);
al.add(rt3);
迭代器itr=al.Iterator();
while(itr.hasNext())
{
市场mt=(市场)itr.next();
系统输出打印项次(百万美元);
系统输出打印项次(mt客户);
系统输出打印号(mt发票编号);
零售店rts=(零售店)itr.next();
System.out.println(rts.custName);
}
}
}

有人能告诉我我做错了什么吗?我想打印
市场
数据以及
零售店
数据

使用
instanceof
操作符检查列表中的对象类型

Iterator itr = al.iterator();

    while (itr.hasNext()) {
        Object o = itr.next();
        if (o instanceof Market) {
            Market mt = (Market) o;
            System.out.println(mt.billamount);
            System.out.println(mt.customer);
            System.out.println(mt.invoiceno);
        }

        if (o instanceof RetailShop) {
            RetailShop rts = (RetailShop)o;
            System.out.println(rts.custName);
        }
    }

首先,ArrayList与object是不好的做法,更喜欢使用这个

List<Market> a1 = new ArrayList<>();
List<RetailShop> a2 = new ArrayList<>();

//Adding Market
al.add(m1);
al.add(m2);
al.add(m3);
al.add(m4);
al.add(m5);
//Adding RetailShop

a2.add(rt1);
a2.add(rt2);
a3.add(rt3);

for(Market mt:a1){
   System.out.println(mt.billamount);
   System.out.println(mt.customer);
   System.out.println(mt.invoiceno);
}
for(RetailShop rts:a2){
   System.out.println(rts.custName);
}

它的作用是检查列表中每个元素的类。如果它是一个市场,它会将对象投射到一个市场,并为其执行相关代码。零售店也收到了。由于您的列表中包含了对象,您需要先检查类型,然后再进行转换

  List<Object> l = Arrays.asList(1, null, 3, "Hello", 5, null);

    Iterator<Object> it = l.iterator();

    while (it.hasNext()) {
        Object x = (Object) it.next();

        if (x != null) {
            System.out.println("getClass: " + x.getClass());
            if ("integer".equalsIgnoreCase(x.getClass().getSimpleName())) {
                System.out.println("This is an int: " + (Integer) x);
            } else if ("string".equalsIgnoreCase(x.getClass().getSimpleName())) {
                System.out.println("This is a string: " + (String) x);
            }

        } else {
            System.out.println("the element is null");
        }
    }
List l=Arrays.asList(1,null,3,“Hello”,5,null);
迭代器it=l.Iterator();
while(it.hasNext()){
Object x=(Object)it.next();
如果(x!=null){
System.out.println(“getClass:+x.getClass());
if(“integer”.equalsIgnoreCase(x.getClass().getSimpleName())){
System.out.println(“这是一个整数:”+(整数)x);
}else if(“string”.equalsIgnoreCase(x.getClass().getSimpleName())){
System.out.println(“这是一个字符串:”+(字符串)x);
}
}否则{
System.out.println(“元素为空”);
}
}

由于在同一个ArrayList中有不同的对象(Market和RetailShop),因此在强制转换该对象之前,应首先检查该对象是否是正确的(右侧)对象。例如,要将对象投射到市场,您应该确保该对象是市场

Iterator itr=al.iterator();

while(itr.hasNext())
{
Object obj=itr.next();
if (obj instanceof Market){
    Market mt=(Market)obj;
    System.out.println(mt.billamount);
    System.out.println(mt.customer);
    System.out.println(mt.invoiceno);
    } 
else {
     if(obj instanceof RetailShop)
      {
      RetailShop rts=(RetailShop)obj;
      System.out.println(rts.custName);
      }
     }
}

也许你可以用try/catch将cast包装到
Market
,因为如果失败,它将抛出
ClassCastException
。一旦发现此类异常,您可以尝试转换到
RetailShop
并打印相关信息。您尝试交替阅读
Market
RetailShop
。但他们不在你的名单上。它们是
M,M,M,M,M,R,R
避免在
ArrayList
中混用东西。创建
ArrayList
ArrayList
,并用它们自己的迭代器(两个不同的循环)迭代这些集合。请演示如何使用列表a1=new ArrayList()检索数据;列表a2=新的ArrayList();你让它变得简单了,不过+1@Thijs Steel,谢谢
Iterator itr=al.iterator();

while(itr.hasNext())
{
Object obj=itr.next();
if (obj instanceof Market){
    Market mt=(Market)obj;
    System.out.println(mt.billamount);
    System.out.println(mt.customer);
    System.out.println(mt.invoiceno);
    } 
else {
     if(obj instanceof RetailShop)
      {
      RetailShop rts=(RetailShop)obj;
      System.out.println(rts.custName);
      }
     }
}