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