从arraylist创建哈希映射元组-Java

时间:2018-09-19 17:21:35

标签: java hashmap tuples

我正在尝试迭代存储在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

我想为每一列获取这样的图表,以便获得按Yes或No(播放列)分组的每一列的出现次数:

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

        }

    }

1 个答案:

答案 0 :(得分:1)

在这里,我将做出一些大胆的猜测,因为从这个问题中,无论是初始数据结构还是所需的输出都不清楚:

  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的值为outlook1的值为temperature,依此类推,即它与列的索引匹配分组。

这假设play列始终是每一行的最后一行,并且既不存在null值也不缺少值。字符串也必须修剪,即没有空格,制表符等。