繁体   English   中英

如何在嵌入到同一Hashmap密钥的ArrayList中绘制特定值?

[英]How do I draw specific values within an ArrayList embedded into the same Hashmap key?

我正在用Java开发RFID阅读器应用程序,但在提取阅读器结果时遇到困难。

由于返回的值具有不同的数据类型,因此读取RFID标签的方法将其值输入到ArrayList中,该ArrayList在“ String”和“ Integers”键下嵌入到LinkedHashMap中。

LinkedHashMap lhm = new LinkedHashMap();
List<String> listOfStringVals = new ArrayList<String>();
List<Integer> listOfIntVals = new ArrayList<Integer>();
String tagID = null;
String TimeStamp = null;
String Date = null;
String Time = null;
int tagAntenna = 0;

tagReads = r.read(1000);
// Print tag reads
for (TagReadData tr : tagReads) 
{
    tagID = tr.epcString();
    Date = df.format(new Date());
    Time = tf.format(new Date());
    TimeStamp = Date + " " + Time;
    tagAntenna = tr.getAntenna();

    listOfStringVals.add(tagID);
    listOfStringVals.add(TimeStamp);
    listOfIntVals.add(tagAntenna);

    lhm.put("strings", listOfStringVals);
    lhm.put("integers", listOfIntVals);

    // Shut down reader
    r.destroy();
}
connect.insertData(lhm);

LinkedHashMap转移到另一种提取方法。

System.out.println("Fetching Keys and corresponding [Multiple] Values ");

for (Map.Entry<String, List<String>> entry : readMap.entrySet()) { 

    String key = entry.getKey();
    List<String> values = entry.getValue();

    System.out.println("Key = " + key);
    System.out.println("Values = " + values);
}
System.out.println(" Insert Complete! ");

有了这个我在控制台中得到以下内容:

Fetching Keys and corresponding [Multiple] Values   
Key = strings  
Values = [tagid1, timestamp1, tagid2, timestamp3, tagid3, timestamp3]  
Key = integers  
Values = [antenna1, antenna2, antenna3]  
Insert Complete!   

我应该添加什么代码才能获得相同编号组的tagID,时间戳和天线(将值的集合分离到每个最初属于的标签中)?

编辑: JSON中的输入示例

var tagReads = [{
    "epc" : "0048029C130143700278303F",
    "timestamp" : "2016-01-02 10:20:45",
    "antenna" : "1"
},
{
    "epc" : "0048029C1301437002783031",
    "timestamp" : "2016-01-02 10:20:45",
    "antenna" : "1"
}
{
    "epc" : "0048029C130143700278305F",
    "timestamp" : "2016-01-03 12:12:00",
    "antenna" : "2"
}];

您为什么不编写一个存储一个标签的所有属性的类?

public class RfidTag
{
  private String tagId;
  private LocalDateTime readTimestamp;
  private Integer antenna;

  // Getters and setters
}

您将其存储在其中的集合将取决于您的要求。 如果您需要记住标签的读取顺序,那么最好使用ArrayList。 如果您需要通过ID来检索标签,则可以将其存储在地图中,并将标签ID作为键,并将RfidTag用作值。

例如:

List<RfidTag> tags = new ArrayList<RfidTag>();

for (TagReadData tr : tagReads) 
{
    RfidTag tag = new RfidTag();

    tag.setTagId(tr.epcString());
    tag.setReadTimestamp(LocalDateTime.now());
    tag.setAntenna(tr.getAntenna());

    tags.add(tag);
}

然后,如果您想打印信息,则可以执行以下操作:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
for(RfidTag tag : tags)
{
    System.out.println("Tag: " + tag.getTagId() + " "
                      + "Timestamp: " + tag.getReadTimestamp().format(formatter) + " "
                      + "Antenna: " + tag.getAntenna() ); 
}

或者,如果您在RfidTag中覆盖toString,它将更加简单。

for(RfidTag tag : tags)
{
    System.out.println(tag); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM