我正在尝试迭代存储在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 (play列)分组的每一列的出现次数:
outlook play
Yes No
sunny 1 1
overcast 1 1
rainy 0 1
我真的不太了解Java。但是,我已经看到,我需要使用一个hashmap元组来实现这个目的,因为我需要像这样对几个属性进行分组(总是与"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);
}
}
发布于 2018-09-20 04:13:50
我将在这里进行一些胡乱猜测,因为从问题中看,初始数据结构和所需的输出都不清楚:
对于play
play
,T
表示的表格数据是一个要按每列分组的列,计算显示的值为Yes
的行数和值为No
的行数
如果这些假设成立,您可以按如下方式实现:
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
是一个参数,对于outlook
,它的值是0
,对于temperature
,它的值是1
,依此类推,即它与分组依据的列的索引相匹配。
这假设play
列始终是每行的最后一列,并且既不存在空值,也不存在缺失值。字符串也必须修剪,即不带空格、制表符等。
https://stackoverflow.com/questions/52411197
复制相似问题