我正在尝试迭代存储在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);
}
}
答案 0 :(得分:1)
在这里,我将做出一些大胆的猜测,因为从这个问题中,无论是初始数据结构还是所需的输出都不清楚:
T
表示的表格数据是List<List<String>>
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
列始终是每一行的最后一行,并且既不存在null值也不缺少值。字符串也必须修剪,即没有空格,制表符等。