猿问

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


        }


    }


慕无忌1623718
浏览 149回答 1
1回答

森林海

我将在这里做出一些疯狂的猜测,因为从这个问题中,初始数据结构和所需的输出都不清楚:表示的表格数据T是List<List<String>>您想按每列分组,计算列中出现的值等于 的行数Yes和出现的值等于No的play行数如果这些假设成立,您可以按如下方式实现:Map<String, Map<Boolean, Long>> result = T.stream()&nbsp; &nbsp; .collect(Collectors.groupingBy(&nbsp; &nbsp; &nbsp; &nbsp; input -> input.get(columnIndex),&nbsp; &nbsp; &nbsp; &nbsp; Collectors.partitioningBy(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input -> "Yes".equals(input.get(input.size() - 1)),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Collectors.counting())));其中columnIndex是参数,其值为0for outlook、1fortemperature等,即它匹配要分组的列的索引。这假设该play列始终是每一行的最后一列,并且既没有空值也没有缺失值。字符串也必须修剪,即没有空格、制表符等。
随时随地看视频慕课网APP

相关分类

Java
我要回答