Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从arraylist-Java创建哈希映射的元组_Java_Hashmap_Tuples - Fatal编程技术网

从arraylist-Java创建哈希映射的元组

从arraylist-Java创建哈希映射的元组,java,hashmap,tuples,Java,Hashmap,Tuples,我试图迭代存储在Java ArrayList中的以下数据。此ArrayList称为“T”: 我想为每一列获得这样的图表,这样我就可以得到每一列的出现次数,按是或否分组(播放列): 我对Java真的不太了解。但是,我已经看到,我需要为此使用一个hashmaps元组,因为我需要像这样对几个属性进行分组(总是与“play”列进行比较) 到目前为止,我的代码是这样的(但我确信它不起作用)。有人能帮我吗?谢谢 Map<String, Integer> mapOutput = new HashM

我试图迭代存储在Java ArrayList中的以下数据。此ArrayList称为“T”:

我想为每一列获得这样的图表,这样我就可以得到每一列的出现次数,按是或否分组(播放列):

我对Java真的不太了解。但是,我已经看到,我需要为此使用一个hashmaps元组,因为我需要像这样对几个属性进行分组(总是与“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);

        }

    }
MapMapOutput=newHashMap();
对于(列表输入:T){
if(mapOutput.containsKey(input.get(input.size()-1)){
mapOutput.put(input.get(input.size()-1),mapOutput.get(input.get(input.size()-1))+1);
}否则{
mapOutput.put(input.get(input.size()-1),1);
}
}

我将在这里做一些大胆的猜测,因为从这个问题上看,初始数据结构和所需的输出都不清楚:

  • T
    表示的表格数据是
    列表
  • 您希望按每列进行分组,计算在
    play
    列中显示的值等于
    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())));
    
    Map结果=T.stream()
    .collect(收集器.groupingBy(
    输入->输入.get(columnIndex),
    收集者。分割者(
    输入->“是”。等于(input.get(input.size()-1)),
    收集器。计数();
    
    其中,
    columnIndex
    是一个参数,对于
    outlook
    ,其值为
    0
    1
    对于
    温度
    ,等等,即它与要分组的列的索引相匹配


    这假定
    play
    列始终是每行的最后一列,并且不存在空值或缺失值。字符串也必须修剪,即没有空格、制表符等。

    输入的每一行都是T中的一个元素?一个哈希映射的元组,其中唯一的键是Yes/No,这似乎是一种非常荒谬的存储方式。。。我建议使用outlook键控的hashmap并存储PlayData,即两个整数的元组。除了它是一个自定义类而不是元组,因为Java没有元组。寻求调试帮助的问题(“我确信它不起作用”)必须包括一个特定的问题或错误,以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。见:请澄清一些事情。。。1.您的表格数据
    T
    是字符串列表吗?2.outlook(第一列)的分组标准是什么?是否要计算出现了多少次,即
    sunny
    play=yes
    play=no
    一起出现,并且与
    outlook
    列中的所有其他值相同?如果为true,则示例输出没有意义(
    cloud
    Yes
    中显示
    1
    ,但它应该是
    0
    )。请提供样本输入和样本输出。
    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);
    
            }
    
        }
    
    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())));