2016-04-06 11 views
0

Javada RFID okuyucu uygulaması üzerinde çalışıyorum ve okuyucu sonuçlarını ayıklamakta zorlanıyorum.Aynı Hashmap anahtarına yerleştirilmiş bir ArrayList içinde belirli değerleri nasıl çizerim?

Geri döndürülen değerler farklı veri türleri olduğundan, RFID etiketlerini okuyan yöntem, değerlerini "String" ve "Integers" tuşlarının altında LinkedHashMap içine yerleştirilmiş bir ArrayList'e girer.

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 ayıklamak için ayrı bir yönteme aktarılır.

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

Ben aynı sayıda grubun TagId, zaman damgası ve anten elde edebilmek için ne eklemelisiniz kodu (toplanmasını ayırmak: Bu ben konsolunda aşağıdaki olsun ile

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! "); 

her biri orijinal olarak ait olan etiketlere değer verir)?

DÜZENLEME: JSON

yılında girdi Örnek
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" 
}]; 
+0

Anlamanızı kolaylaştırmak için örnek bir değer girişine sahip bir json verin. – dambros

+0

Üzgünüm, JSON hakkında fazla bir şey okumadım, şimdiye kadar konuyla ilgili bulduklarımdan bazı örnekler ekledim. – Lagostax

+0

Btw kodunuzun birtakım hatalara sahip olduğu görünüyor. Koleksiyon lhm hiçbir zaman örneklenmez ve for döngüsünde r.destroy'i çağırırsınız, böylece ilk etiketi okur ve okuyucuyu okumadan önce okuyucuyu imha eder mi? –

cevap

0

Neden bir etiket için tüm özelliklerini saklayan bir sınıf yazmıyorsun?

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

    // Getters and setters 
} 

Bunu sakladığınız koleksiyon gereksinimlerinize bağlı olacaktır. Diziyi hatırlamanız gerekiyorsa etiketler okundu ve ArrayList en iyisi olurdu. Bir etiketi kimliğine göre almanız gerekiyorsa, bir haritada saklanabilir ve etiket kimliğini anahtar olarak ve RfidTag değerini değer olarak kullanabilirsiniz. Örneğin

:

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

O zaman böyle bir şey yapabileceğini bilgiyi yazdırmak istiyorsa:

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

Yoksa RfidTag içinde toString geçersiz eğer daha basit olurdu.

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

Bir etiketin niteliklerini saklamak, bunları okumak için RfidTag'da bunları ayrı değişkenler olarak saklamak mı demek istiyorsunuz? Etiketleri okuyan yöntem, birden fazla etiketten bilgi döndürecektir, bu yüzden nasıl çalışacağından emin değilim. Ayrıca benim anlayışından, LinkedHashMap değerleri ArrayList ile karşılaştırıldığında bu özelliğini kullanarak gitmek için nasıl açık olacağı konusunda net olmamakla birlikte, sırayla sırayla saklayabilir. – Lagostax

+0

Döngünün her yinelemesi yeni bir RfidTag örneği oluşturacak, değerlerini belirleyecek ve koleksiyona ekleyeceksiniz. –

+0

Şimdi anlıyorum, yardımın için teşekkürler! – Lagostax

İlgili konular