我正在尝试创建一个HashMap
,其值为List<Pack>
,其中Pack
是我创建的对象,如果条件为真,则将Packs添加到此列表中。
现在即使条件成立我也会收到错误,我认为我没有正确初始化它可以告诉我问题在哪里吗?
static HashMap<Long, List<Pack>> ackPkts = new HashMap<Long, List<Pack>>();
static HashMap<Long, List<Pack>> dataPkts = new HashMap<Long, List<Pack>>();
static List<Pack> pktList = new ArrayList<Pack>();
if((msg.getPayloadLength()) == 0 && (msg.isSYN()) == false && (msg.isACK()) == true){
Pack pack = new Pack(msg.getAck(), msg.sackPresent(), captureTime, srcIP, destIP, msg.isSYN());
(ackPkts.get(msg.getAck())).add(pack);
} else {
Pack pack = new Pack(msg.getSeq(), captureTime, srcIP, destIP,
msg.getPayloadLength(), msg.isSYN());
(dataPkts.get(msg.getSeq())).add(pack);
}
答案 0 :(得分:0)
List<Pack>
中的HashMap
永远不会被定义。它们属于interface
列表,但您无法确定它们是什么类型的List
。您必须遵循以下结构:
Map<long, List<Pack>> map = new HashMap<>() // java 7 syntax
List<Pack> packets = new ArrayList<>();
packets.add(pack);
map.put(msg.getAck(), packets);
将一个元素添加到'List'时,你现在可以使用它,因为它存在:
map.get(msg.getAck()).add(pack);
答案 1 :(得分:0)
您希望在使用List
之前将Map
个实例放在第一个add()
中:
static List<Pack> datapktList = new ArrayList<Pack>();
static List<Pack> actpktList = new ArrayList<Pack>();
然后将相应的List
个实例添加到Map
:
ackPkts.put(msg.getAck(), datapktList );
dataPkts.put(msg.getAck(), actpktList );
接下来会有效:
(ackPkts.get(msg.getAck())).add(pack);
(dataPkts.get(msg.getSeq())).add(pack);