Java8 генерирует карту, содержащую другую карту - PullRequest
0 голосов
/ 12 февраля 2019

Как мне добиться этого, используя java = 8

У меня есть CSV в формате ниже, и из этого я хочу заполнить Map<String, Map<String, String>, где внешняя карта будет иметь ключи scriptId и transationType какэто отдельные Type и внутренняя карта для ключа scriptId должны содержать первые 5 значений, начиная с позиции 2 в качестве ключа и 3 в качестве значения.

<scriptId<
      <TATA,TATA Moters>
      <REL,Reliance Industries Ltd>
      <LNT, L&T>
      <SBI, State Bank of India>>
 <transactionType,<
       <P,B>
       <S,S>>

Содержимое файла CSV

Type,ArcesiumValue,GICValue
scriptId,TATA,TATA Moters
scriptId,REL,Reliance Industries Ltd
scriptId,LNT,L&T
scriptId,SBI,State Bank of India
transactionType,P,B
transactionType,S,S

Как создать это с помощью Java8

public void loadReferenceData() throws IOException {

        List<Map<String, Map<String, String>>> cache = Files.lines(Paths.get("data/referenceDataMapping.csv")).skip(1)
                .map(mapRefereneData).collect(Collectors.toList());

        System.out.println(cache);

    }

    public static Function<String, Map<String, Map<String, String>>> mapRefereneData = (line) -> {
        String[] sp = line.split(",");
        Map<String, Map<String, String>> cache = new HashMap<String, Map<String, String>>();
        try {
            if (cache.containsKey(sp[0])) {
                cache.get(sp[0]).put(sp[1], sp[2]);
            } else {
                Map<String, String> map = new HashMap<String, String>();
                map.put(sp[1], sp[2]);
                cache.put(sp[0], map);
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return cache;
    };

1 Ответ

0 голосов
/ 12 февраля 2019

Ну намного проще использовать два Collectors:

Map<String, Map<String, String>> groupCSV = Files.lines(Paths.get("..."))
    .skip(1L).map(l -> l.split(","))
    .collect(Collectors.groupingBy(a -> a[0], Collectors.toMap(a -> a[1], a -> a[2])));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...