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

标签 java arraylist linkedhashmap

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

我有 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/

相关文章:

java - setLong 方法参数与数据类型不匹配

java - 如果添加null,ArrayList会动态增长吗?

java - 仅将 ArrayList 作为值而不是引用传递

java - 获取LinkedHashMap键的索引

java - 反射 - 从 HashMap 获取不同的结果 - LinkedHashMap

java - 用 Linkedhashmap VALUE 替换 ArrayList 项

java - 使用java删除xml结束标记后的额外数据

java - EXACTLY HH :MM:SS time String 的正则表达式模式

java - 如何确保系统通过 LAN 连接?

java - 如何在数组列表中查找相同整数的倍数?