【问题标题】:create tuple of hashmaps from arraylist - Java从arraylist创建哈希图元组 - Java
【发布时间】:2018-09-19 17:21:35
【问题描述】:

我正在尝试迭代我存储在 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中的一个元素?
  • 一个哈希图元组,其中唯一的键是是/否,似乎是一种非常荒谬的存储方式...我建议一个由 Outlook 键入的哈希图并存储 PlayData,两个整数的元组.除了它是一个自定义类而不是元组,因为 Java 没有元组。
  • 寻求调试帮助的问题(“我确定它不起作用”)必须包含特定问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。见:minimal reproducible example
  • 请澄清一些事情... 1. 您的表格数据T 是字符串列表吗? 2.outlook(第一列)的分组标准如何?您是否要计算sunny 与play=yes 和play=no 出现的次数,以及outlook 列中的所有其他值的出现次数?如果为真,那么您的示例输出没有意义(overcast 在Yes 中与1 一起出现,但它应该是0)。请提供示例输入和示例输出。

标签: java hashmap tuples


【解决方案1】:

我将在这里做一些疯狂的猜测,因为从问题中看初始数据结构和期望的输出都不清楚:

  1. T 表示的表格数据是List&lt;List&lt;String&gt;&gt;
  2. 您想按每一列进行分组,计算出现了多少行值等于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 列始终是每一行的最后一列,并且既没有空值也没有缺失值。字符串也必须修剪,即没有空格、制表符等。

【讨论】:

    猜你喜欢
    • 2010-11-03
    • 2011-04-20
    • 1970-01-01
    • 2011-05-08
    • 2012-03-27
    • 1970-01-01
    • 2017-04-12
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多