создать кортеж из hashmaps из arraylist - Java - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь перебрать следующие данные, которые я сохранил в ArrayList на Java.Этот ArrayList называется «T»:

outlook    temperature    humidity    windy    play
sunny      hot            high        False    No
overcast   hot            low         True     No
rainy      cool           normal      True     No
sunny      hot            normal      False    Yes

Я хочу получить диаграмму, подобную этой, для каждого столбца, чтобы я получил количество вхождений каждого столбца, сгруппированных по Да или Нет (столбец воспроизведения):

outlook          play
            Yes        No
sunny        1          1
overcast     1          1
rainy        0          1

Я действительно мало знаю о Java.Но я видел, что для этой цели мне нужно использовать кортеж хеш-карт, так как мне нужно сгруппировать несколько атрибутов, как это (всегда по сравнению со столбцом "play").

Пока мой кодэто (но я уверен, что это не работает).Кто-нибудь может мне помочь?Спасибо

Map<String, Integer> mapOutput = new HashMap();

    for (List<String> input: T) { 

        if (mapOutput.containsKey(input.get(input.size()-1))) { 
            mapOutput.put(input.get(input.size()-1), mapOutput.get(input.get(input.size()-1)) + 1);

        } else {
            mapOutput.put(input.get(input.size()-1), 1);

        }

    }

1 Ответ

0 голосов
/ 19 сентября 2018

Я собираюсь сделать некоторые дикие предположения здесь, потому что ни исходная структура данных, ни желаемый вывод не ясны из вопроса:

  1. Табличные данные, представленные T, являются List<List<String>>
  2. Вы хотите сгруппировать по каждому столбцу, посчитав, сколько строк появляется со значением, равным Yes, и сколько строк появляется со значением, равным No, для столбца play

Если эти предположения верны, вы можете достичь этого следующим образом:

Map<String, Map<Boolean, Long>> result = T.stream()
    .collect(Collectors.groupingBy(
        input -> input.get(columnIndex),
        Collectors.partitioningBy(
            input -> "Yes".equals(input.get(input.size() - 1)),
            Collectors.counting())));

Где columnIndex - параметр, а его значение равно 0 для outlook, 1для temperature и т. д., т. е. он совпадает с индексом столбца, по которому нужно сгруппировать.

Предполагается, что столбец play всегда является последним для каждой строки и что нет ни нулевых, ни пропущенных значений,Строки также должны быть обрезаны, то есть без пробелов, табуляции и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...