2016-04-07 28 views
1

kullanarak haritaya csv dönüştürmek. Eğer, ben, dizeleri akışı oluşturarak virgül her satırı sınırlayan ve bir dize dizisi dönüştürülmesi ve son olarak endeks 1.nasıl iki sütunlu CSV dosyası dönüştüren basit ayrıştırma util oluşturmak ve bir harita koydu çalışıyorum Java 8 Akışı

için endeks 0 ve değer anahtarı eşleme ediyorum görebileceğiniz gibi

public Map<String, String> getMapFromCSV(final String filePath) throws IOException { 
    return Files.lines(Paths.get(filePath)) 
       .map(line -> line.split(",")) 
       .collect(Collectors.toMap(line -> line[0], line -> line[1])); 
} 

Ben bu testi çalıştırdığınızda nedense

@Test 
public void testGetMapFromCSV() throws IOException{ 
    actual = util.getMapFromCSV(filePath).get("AL"); 
    expected = "ALABAMA"; 

    assertEquals(expected, actual); 
} 

, gerçek değeri null. Geçersiz bir dosyaPaketini devre dışı bıraktım çünkü başka bir birim testinde iyi çalışıyor ve anahtar değer CSV'de mevcut. Birkaç saatliğine bakıyorum, belki birileri benim hatama işaret edebilir.

Ayrıca, Java 8 için oldukça yeni, bu yüzden herkes bu yazı daha iyi/daha temiz yolu biliyor, ben geribildirim takdir ediyorum.

+3

Burada bir dosya tanıtıcısını sızdırıyorsunuz. Files.lines() ', try-with-resources ifadesinde açılmalıdır. – fge

+1

Dosyada boşluk var mı? – rgettman

+2

'null' Mayıs' (anahtar) map.get '' haritası key' bulamadık düşündürmektedir. Util.getMapFromCSV (filePath) 'ile döndürülen haritanın tamamını yazdırmayı deneyin. – Pshemo

cevap

2

Tamam, lines.close() eklendi ve csv herhangi boşluk kaldırıldı ve işe yarıyor! Garip, csv göz önüne alındığında diğer yöntemimde para cezası aldım. İşte böyle görünüyor:

public static Map<String, String> getMapFromCSV(final String filePath) throws IOException{ 

     Stream<String> lines = Files.lines(Paths.get(filePath)); 
     Map<String, String> resultMap = 
       lines.map(line -> line.split(",")) 
        .collect(Collectors.toMap(line -> line[0], line -> line[1])); 

     lines.close(); 

     return resultMap; 
    } 
+1

bölünmüş önce boş satırları filtreleyerek deneyebilirsiniz –