首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从arraylist - Java创建hashmap的元组

从arraylist - Java创建hashmap的元组
EN

Stack Overflow用户
提问于 2018-09-20 01:21:35
回答 1查看 310关注 0票数 0

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

        }

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-20 04:13:50

我将在这里进行一些胡乱猜测,因为从问题中看,初始数据结构和所需的输出都不清楚:

对于play

  1. 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列始终是每行的最后一列,并且既不存在空值,也不存在缺失值。字符串也必须修剪,即不带空格、制表符等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52411197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档