Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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 为什么我无法分配嵌入式ArrayList<;整数>;到本地声明的ArrayList<;整数>;?_Java_Arraylist_Linkedhashmap - Fatal编程技术网

Java 为什么我无法分配嵌入式ArrayList<;整数>;到本地声明的ArrayList<;整数>;?

Java 为什么我无法分配嵌入式ArrayList<;整数>;到本地声明的ArrayList<;整数>;?,java,arraylist,linkedhashmap,Java,Arraylist,Linkedhashmap,抱歉,如果标题不清楚,我不太擅长编程术语 我有两个string ArrayList和一个integer ArrayList,它们是从一个方法获得的,通过集合LinkedHashMap

抱歉,如果标题不清楚,我不太擅长编程术语

我有两个string ArrayList和一个integer ArrayList,它们是从一个方法获得的,通过集合LinkedHashMap传递给一个单独的方法。但是,当我尝试将integer ArrayList设置为接收方法中声明的空ArrayList时,它显示了语法错误:“不兼容的类型:List无法转换为List

起动器方法:

public static void main(String[] args) {

    try{

    LinkedHashMap lhm = new LinkedHashMap();
    List<String> listEPC = new ArrayList<String>();
    List<String> listTimeStamp = new ArrayList<String>();
    List<Integer> listAntenna = new ArrayList<Integer>();

    String tagID = "EQ5237";
    String TimeStampStr = "12:23:22";
    int tagAntenna = 2;        

            listEPC.add(tagID);
            listTimeStamp.add(TimeStampStr);
            listAntenna.add(tagAntenna);

            lhm.put("epcs", listEPC);
            lhm.put("timestamps", listTimeStamp);
            lhm.put("antennas", listAntenna);

   insertData insert = new insertData();
   insert.insertData(lhm);                    //send map with values to new method

    }catch(Exception e){
    e.printStackTrace();
    }
}
publicstaticvoidmain(字符串[]args){
试一试{
LinkedHashMap lhm=新LinkedHashMap();
List listpc=new ArrayList();
List listTimeStamp=新建ArrayList();
List listAntenna=new ArrayList();
字符串tagID=“EQ5237”;
字符串TimeStampStr=“12:23:22”;
int TAG天线=2;
listpc.add(tagID);
添加(TimeStampStr);
添加(标记天线);
lhm.put(“epcs”,ListPC);
lhm.put(“时间戳”,listTimeStamp);
lhm.put(“天线”,列表天线);
insertData insert=新的insertData();
insert.insertData(lhm);//将带有值的映射发送到新方法
}捕获(例外e){
e、 printStackTrace();
}
}
接收方式:

public class insertData {

    public void insertData(LinkedHashMap<String, List<String>> readMap) {

            List<String> listEPC = new ArrayList<String>();
            List<String> listTimeStamp = new ArrayList<String>();
            List<Integer> listAntenna = new ArrayList<Integer>();

            String EPC = null;
            String TimeStamp = null;
            Integer Antenna = null;

            listEPC = readMap.get("epcs");
            listTimeStamp = readMap.get("timestamps");
            listAntenna = readMap.get("antennas");      //error message here

            for(int i=0; i<readMap.size(); i++){

                EPC = listEPC.get(i);
                TimeStamp = listTimeStamp.get(i);
                Antenna = listAntenna.get(i);

                System.out.println("Entry " + i );
                System.out.println("Values: " + EPC + TimeStamp + Antenna);
            }
          }
}
公共类insertData{
公共void insertData(LinkedHashMap readMap){
List listpc=new ArrayList();
List listTimeStamp=新建ArrayList();
List listAntenna=new ArrayList();
字符串EPC=null;
字符串时间戳=null;
整数天线=零;
listpc=readMap.get(“epcs”);
listTimeStamp=readMap.get(“timestamp”);
listAntenna=readMap.get(“天线”);//此处显示错误消息

对于(int i=0;i我将在底部包含正确的答案,但对于您的问题标题,您必须将您的方法签名更改为:

LinkedHashmap<String, List<?>> readMap;
注意,这些都不是好的解决方案。

您应该有一个列表,其中包含一个对象以及您所需的所有数据

我可以想象思维过程是这样的,“我有这些东西,它们包含两个字符串和一个整数。我将为每个字符串和整数创建一个变量。”然后你会问这样一个问题,“我如何创建这些东西的集合?”

这个问题的错误答案是,“我将为每个值创建一个列表,并通过索引匹配相关的值。”正确答案是,“我将创建一个类来表示我的数据,并将其存储在一个列表中。”这是面向对象编程的基本本质(欢迎使用java)

首先,我们设计课程:

class EPCThing{
    String EPC;
    String timeStamp;
    int Antennas;

    public EPCThing(String tagId, String timeStamp, int antennas){
        EPC=tagId;
        this.timeStamp = timeStamp;
        Antennas = antennas;
    }

    @Override
    public String toString(){
        return "Values: " + EPC + TimeStamp + Antenna
    }

}
现在,您的程序的主要方法如下

List<EPCThing> things = new ArrayList<>();

String tagID = "EQ5237";
String TimeStampStr = "12:23:22";
int tagAntenna = 2;        

EPCThing thing = new EPCThing(tagID, TimeStampStr, tagAntenna);
things.add(thing);

insertData insert = new insertData();
insert.insertData(things);
List things=new ArrayList();
字符串tagID=“EQ5237”;
字符串TimeStampStr=“12:23:22”;
int TAG天线=2;
EPCThing thing=新的EPCThing(tagID、timestamstr、tagAntenna);
事物。添加(事物);
insertData insert=新的insertData();
insert.insertData(事物);
然后我们可以修复insertData方法

public void insertData(List<EPCThing> things) {

    for(int i=0; i<things.size(); i++){

            System.out.println("Entry " + i );
            System.out.println("Values: " + things.get(i));

    }
}
public void insertData(列出事物){

对于(int i=0;i我将在底部包含正确的答案,但对于您的问题标题,您必须将您的方法签名更改为:

LinkedHashmap<String, List<?>> readMap;
注意,这些都不是好的解决方案。

您应该有一个列表,其中包含一个对象以及您所需的所有数据

我可以想象思维过程是这样的,“我有这些东西,它们包含两个字符串和一个整数。我将为每个字符串和整数创建一个变量。”然后你会问这样一个问题,“我如何创建这些东西的集合?”

这个问题的错误答案是,“我将为每个值创建一个列表,并通过索引匹配相关的值。”正确答案是,“我将创建一个类来表示我的数据,并将其存储在一个列表中。”这是面向对象编程的基本本质(欢迎使用java)

首先,我们设计课程:

class EPCThing{
    String EPC;
    String timeStamp;
    int Antennas;

    public EPCThing(String tagId, String timeStamp, int antennas){
        EPC=tagId;
        this.timeStamp = timeStamp;
        Antennas = antennas;
    }

    @Override
    public String toString(){
        return "Values: " + EPC + TimeStamp + Antenna
    }

}
现在,您的程序的主要方法如下

List<EPCThing> things = new ArrayList<>();

String tagID = "EQ5237";
String TimeStampStr = "12:23:22";
int tagAntenna = 2;        

EPCThing thing = new EPCThing(tagID, TimeStampStr, tagAntenna);
things.add(thing);

insertData insert = new insertData();
insert.insertData(things);
List things=new ArrayList();
字符串tagID=“EQ5237”;
字符串TimeStampStr=“12:23:22”;
int TAG天线=2;
EPCThing thing=新的EPCThing(tagID、timestamstr、tagAntenna);
事物。添加(事物);
insertData insert=新的insertData();
insert.insertData(事物);
然后我们可以修复insertData方法

public void insertData(List<EPCThing> things) {

    for(int i=0; i<things.size(); i++){

            System.out.println("Entry " + i );
            System.out.println("Values: " + things.get(i));

    }
}
public void insertData(列出事物){

对于(int i=0;i您不能将
列表
分配给
列表
。元素的类型基本不同

您需要构建一个新的
列表

List<Integer> listOfIntegers = new ArrayList<>();
for (String entry : listOfStrings) {
  listOfIntegers.add(Integer.valueOf(entry);
}
然后在方法签名中可以有不同的列表类型:

void insertData(
    List<String> listEPC,
    List<String> listTimestamp,
    List<Integer> listAntenna) { ... }
void insertData(
列出ListPC,
列表时间戳,
列表列表{…}

不能将
列表
分配给
列表
。元素的类型基本不同

您需要构建一个新的
列表

List<Integer> listOfIntegers = new ArrayList<>();
for (String entry : listOfStrings) {
  listOfIntegers.add(Integer.valueOf(entry);
}
然后在方法签名中可以有不同的列表类型:

void insertData(
    List<String> listEPC,
    List<String> listTimestamp,
    List<Integer> listAntenna) { ... }
void insertData(
列出ListPC,
列表时间戳,
列表列表{…}

因为你的LinkedHashmap包含列表而不是列表。你必须强制转换。你想迭代
readMap.size()
?这将与你在映射中包含的列表长度不同。@matt“你必须强制转换”我觉得类型不安全。@AndyTurner取决于您的强制转换方式,在我的回答中,我说明了两种强制转换方式。其中一种是“类型安全”,因为它会引发异常。我还建议改进表单。不要在代码中使用原始类型:
LinkedHashMap lhm=new LinkedHashMap()
上应该有泛型。如果你添加泛型,你会在
ma中发现一个类型错误