java - 从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);
}
}
解决方案
我将在这里做出一些疯狂的猜测,因为从问题中看初始数据结构和所需输出都不是很清楚:
- 表示的表格数据
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())));
wherecolumnIndex
是一个参数,它的值是0
for outlook
,1
fortemperature
等,即它与要分组的列的索引匹配。
这假定该play
列始终是每一行的最后一列,并且既没有空值也没有缺失值。字符串也必须被修剪,即没有空格、制表符等。
推荐阅读
- dynamic-data - 请求自定义路由文件时动态更改数据库
- python - 如何使用“--no-binary”编写 requirements.txt 文件?
- visual-studio-code - VSCode 终端进程命令启动失败
- powershell - Powershell下载并执行exe文件
- angular - 使用服务层 HttpTestingController 进行 Angular 单元测试错误:预计未找到打开的请求 GET
- html - 如何使背景图像填充 div 并做出响应
- c# - 无法初始化模拟类的成员
- css - Laravel DataTables 基于值的颜色单元格?
- angular - 面临在 Json 值中为名称查找 id 的问题
- python - 当 slice 有一行结果时返回 pandas.DataFrame