首页 > 解决方案 > 从arraylist创建哈希图元组 - Java

问题描述

我正在尝试迭代我存储在Java ArrayList 中的以下数据。这个 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真的不太了解。但是,我已经看到我需要为此目的使用一个哈希图元组,因为我需要像这样对几个属性进行分组(总是与“播放”列相比)。

到目前为止,我的代码是这样的(但我确信它不起作用)。任何人都可以帮助我吗?谢谢

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);

        }

    }

标签: javahashmaptuples

解决方案


我将在这里做出一些疯狂的猜测,因为从问题中看初始数据结构和所需输出都不是很清楚:

  1. 表示的表格数据TList<List<String>>
  2. 您想按每列分组,计算该列出现的值等于的行数以及出现值等于的行YesNoplay

如果这些假设成立,您可以按如下方式实现:

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())));

wherecolumnIndex是一个参数,它的值是0for outlook1fortemperature等,即它与要分组的列的索引匹配。

这假定该play列始终是每一行的最后一列,并且既没有空值也没有缺失值。字符串也必须被修剪,即没有空格、制表符等。


推荐阅读