gpt4 book ai didi

java - 为什么我无法将嵌入的 ArrayList 分配给本地声明的 ArrayList

转载 作者:行者123 更新时间:2023-12-01 18:05:54 25 4
gpt4 key购买 nike

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

我有 2 个字符串 ArrayList 和一个从一个方法获得的整数 ArrayList,该方法通过集合 LinkedHashMap< String, List< String>> 传递给单独的方法。但是,当我尝试将整数 ArrayList 设置为在接收方法中声明的空 ArrayList 时,它显示语法错误:“不兼容的类型:List< String> 无法转换为 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();
}
}

接收方式:

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);
}
}
}

仅当我将整数的所有实例更改为字符串时,此代码才有效,这不是我在实际代码中想要的。为什么会这样?我该如何解决这个问题?

最佳答案

您无法分配 List<String>List<Integer> 。这些元素是根本不同的类型。

您需要构建一个新的 List :

List<Integer> listOfIntegers = new ArrayList<>();
for (String entry : listOfStrings) {
listOfIntegers.add(Integer.valueOf(entry);
}

当然,您还需要处理列表元素无法解析为整数的可能性。

<小时/>

但是,您只是通过将所有内容填充到单个映射中来丢弃类型信息。最好分别传递三个列表:

insertData(listEPC, listTimestamp, listAntenna);

然后您可以在方法签名中使用不同的列表类型:

void insertData(
List<String> listEPC,
List<String> listTimestamp,
List<Integer> listAntenna) { ... }

关于java - 为什么我无法将嵌入的 ArrayList<Integer> 分配给本地声明的 ArrayList<Integer>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36471145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com