Как преобразовать следующий CSV в Hashmap с помощью JAVA [closed]

Предположим, у меня есть CSV-файл, подобный этому:

Name    Roll No.    Address     PhoneNo
Jhon    909    CA       1
Jeff    101    CE       2
Jhon    121    US      3
Jhon    909    US      4

Я хочу сгенерировать такой вывод:

{Jhon={909={CA=[1],US=[4]},121={US=[3]}}, Jeff={101={CE=[2]}}}

Все Jhon должны сгруппироваться на 1 карту, а также, если бросок нет. то же самое, тогда он также должен получить группу на той же карте.

0
задан 23 February 2015 в 10:15

1 ответ

У Вас должен быть список в карте в карте, чтобы сделать это. Первая карта имеет ключ к имени, и внутренняя карта имеет ключ к списку.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    static Map<String, Map<String, List<Person>>> persons = new HashMap<String, Map<String, List<Person>>>();

    public static void main(String[] args) throws Exception{
        final BufferedReader br = new BufferedReader(new InputStreamReader(Main.class.getClassLoader().getResourceAsStream("stuff.csv")));
        br.readLine(); //Skip the header line
        while(br.ready()){
            add(new Person(br.readLine()));
        }
        System.out.println(persons);
    }

    private static void add(Person person) {
        if(!persons.containsKey(person.getName())){
            persons.put(person.getName(), new HashMap<String, List<Person>>());
        }
        if(!persons.get(person.getName()).containsKey(person.getRoll())){
            persons.get(person.getName()).put(person.getRoll(), new ArrayList<Person>());
        }
        persons.get(person.getName()).get(person.getRoll()).add(person);
    }

    static class Person {

        String name, roll, address, phone;

        public Person(String string) {
            final StringTokenizer tok = new StringTokenizer(string, " ", false);
            name = tok.nextToken();
            roll = tok.nextToken();
            address = tok.nextToken();
            phone = tok.nextToken();
        }

        public String getName() {
            return name;
        }

        public String getRoll() {
            return roll;
        }

        @Override
        public String toString() {
            return address + "=[" + phone + "]";
        }
    }
}

Это производит:

{Jeff={101=[CE=[2]]}, Jhon={121=[US=[3]], 909=[CA=[1], US=[4]]}}
1
ответ дан 3 August 2019 в 14:50

Другие вопросы по тегам:

Похожие вопросы: