如何在嵌入到同一 Hashmap 键中的 ArrayList 中绘制特定值?
How do I draw specific values within an ArrayList embedded into the same Hashmap key?
我正在 java 开发 RFID reader 应用程序,但在提取 reader 结果时遇到困难。
由于返回的值是不同的数据类型,读取 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、timestamp、antenna(将values的集合分离到各自所属的tags中)?
编辑:
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"
}];
你为什么不写一个 class 来存储一个标签的所有属性?
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);
}
我正在 java 开发 RFID reader 应用程序,但在提取 reader 结果时遇到困难。
由于返回的值是不同的数据类型,读取 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、timestamp、antenna(将values的集合分离到各自所属的tags中)?
编辑: 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"
}];
你为什么不写一个 class 来存储一个标签的所有属性?
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);
}