How to write HashMap to CSV?

14,934

Have you looked into SuperCSV? The framework has a built in CsvMapWriter: http://super-csv.github.io/super-csv/examples_writing.html

You basically define your header as an array (you can take the map's sorted keyset for that) and then simply write the map using:

mapWriter.write(map, header, processors);
Share:
14,934
XorOrNor
Author by

XorOrNor

Updated on June 04, 2022

Comments

  • XorOrNor
    XorOrNor almost 2 years

    I have a method countOcc() which prints a list (below).

    1:00 ==> 1 hits(s)
    2:00 ==> 4 hits(s)
    3:00 ==> 3 hits(s)
    4:00 ==> 6 hits(s)
    5:00 ==> 14 hits(s)
    6:00 ==> 26 hits(s)
    7:00 ==> 16 hits(s)
    8:00 ==> 25 hits(s)
    9:00 ==> 34 hits(s)
    10:00 ==> 39 hits(s)
    11:00 ==> 33 hits(s)
    12:00 ==> 50 hits(s)
    13:00 ==> 49 hits(s)
    14:00 ==> 51 hits(s)
    15:00 ==> 53 hits(s)
    16:00 ==> 40 hits(s)
    17:00 ==> 20 hits(s)
    18:00 ==> 33 hits(s)
    19:00 ==> 26 hits(s)
    20:00 ==> 18 hits(s)
    21:00 ==> 29 hits(s)
    22:00 ==> 7 hits(s)
    

    method:

    public void countOcc(ArrayList<Integer> list) {
    
        String aout = new String();
        System.out.println("\n");
    
        Integer[] numbers = list.toArray(new Integer[list.size()]);
    
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int i = 0; i < numbers.length; i++) {
            int key = numbers[i];
            if (map.containsKey(key)) {
                int occurrence = map.get(key);
                occurrence++;
                map.put(key, occurrence);
            } else {
                map.put(key, 1);
            }
        }
    
        Iterator iterator = map.keySet().iterator();
        while (iterator.hasNext()) {
            int key = (Integer) iterator.next();
            int occurrence = map.get(key);
    
             System.out.println(key+":00"+ " ==> " + occurrence + " hits(s)");
    
    
        }        
    
    }
    

    I'd like to have a csv file on its output:

    1:00,2:00,3:00,4:00,5:00,6:00,7:00,8:00,9:00,10:00,11:00,12:00
    1,4,3,6,14,26,16,25,34,39,33,50
    

    I know about opencsv but I don't really know how to use it with HashMap.

  • nutfox
    nutfox almost 9 years
    The order of the keySet() and values() method calls are not guaranteed to be the same. So you could end up with headers that don't match the content rows - also your header wouldn't be sorted.
  • hd1
    hd1 almost 9 years
    It gave me the order OP showed, and does so consistently. shrug
  • nutfox
    nutfox almost 9 years
    I don't see why you would write this yourself if you can reuse an existing and well tested framework. In addition: Your code should not use a hard coded line separator - you should use the system's value for this - otherwise your code only works in Windows and not in e.g. Linux (or the other way around).