Java 如何在新创建的文件中获取月份总数?

Java 如何在新创建的文件中获取月份总数?,java,arrays,class,sorting,methods,Java,Arrays,Class,Sorting,Methods,我目前正在从这个角度研究C语言 选项3:下载统计数据 如果用户选择此选项,程序将创建包含以下数据的统计文件: a. Power output sorted from lowest to highest b. Day with highest output c. Total by month d. Average power output for all the data 统计文件将与输入文件同名,但附加了_stats.txt。例如,如果输入文件名为data.txt,则stats文件

我目前正在从这个角度研究C语言 选项3:下载统计数据

如果用户选择此选项,程序将创建包含以下数据的统计文件:

a.  Power output sorted from lowest to highest
b.  Day with highest output 
c.  Total by month 
d.  Average power output for all the data
统计文件将与输入文件同名,但附加了_stats.txt。例如,如果输入文件名为data.txt,则stats文件将名为data_stats.txt

我的数据文件包含

January 10 2018 236.9
January 11 2018 267.6
January 12 2018 278.1
January 13 2018 246.9
January 14 2018 262.3
January 15 2018 288.6
February 2 2018 199.7
February 3 2018 134.6
February 4 2018 200.8
February 5 2018 198.2
March 9 2018 169.7
March 10 2018 168.3
March 11 2018 179.4
当我运行C时,我的总功率是288.6,如何计算每个月的总和

 public static void createStatsFile(ArrayList<Entry> uploadResults) {
    ///////////////
    ///////A///////
    ///////////////
    try {
        PrintWriter writer = new PrintWriter("data_stat.txt", "UTF-8");

        ArrayList<Entry> lowestToHighest = bubbleSort(uploadResults);

        for(Entry entry : lowestToHighest) {
            writer.print(
                    "Month: " + entry.getMonth() + " Day: " + entry.getDay() + " Year: " + entry.getYear() + " Power Output: " + entry.getPowerOutput());
            writer.print("\n");
            entry.print();
        }

        ///////////////
        ///////B///////
        ///////////////
        Entry tmpEntry = null;

        for(Entry entry : uploadResults) {
            if(tmpEntry == null) {
                tmpEntry = entry;
            } else {
                if(entry.getPowerOutput() > tmpEntry.getPowerOutput()) {
                    tmpEntry = entry;
                }
            }
        }

        writer.write("Day of Max Power Outage: " + tmpEntry.getMonth() + " " + tmpEntry.getPowerOutput());

        ///////////////
        ///////C///////
        ///////////////

        //ArrayList<Entry> totalByMonth = bubbleSort(uploadResults);
        Entry tempEntry = null;
        for(Entry entry: uploadResults) {
            float sum;
            sum =entry.getPowerOutput();
        }

        writer.write("Total power output by month: " + tmpEntry.getMonthList() + " " + tmpEntry.getPowerOutput());
        writer.close();

在这里,您可以初始化每个循环中的和

    Entry tempEntry = null;
    for(Entry entry: uploadResults) {
        float sum;
        sum =entry.getPowerOutput();
    }
移动
浮点和在总和之前并添加到总和:

    Entry tempEntry = null;
    float sum = 0;
    for(Entry entry: uploadResults) {
        sum += entry.getPowerOutput();
    }

在这里,您可以初始化每个循环中的和

    Entry tempEntry = null;
    for(Entry entry: uploadResults) {
        float sum;
        sum =entry.getPowerOutput();
    }
移动
浮点和在总和之前并添加到总和:

    Entry tempEntry = null;
    float sum = 0;
    for(Entry entry: uploadResults) {
        sum += entry.getPowerOutput();
    }

您可以使用streams获得所需结果的映射

 Map<String, Double> collect = uploadResults.stream().collect(
            Collectors.groupingBy(Entry::getMonth, Collectors.summingDouble(Entry::getPowerOutput)));
编辑:

对于低于Java8的版本,这应该可以

Map<String, Float> monthMap = new HashMap<>();
for (Entry uploadResult : uploadResults) {
    String month = uploadResult.getMonth();
    Float powerOutput = uploadResult.getPowerOutput();

    if( monthMap.containsKey(month) ){
        powerOutput += monthMap.get(month);
    }
    monthMap.put( month, powerOutput);
}
System.out.println(monthMap);
Map monthMap=newhashmap();
for(条目uploadResult:uploadResults){
String month=uploadResult.getMonth();
Float powerOutput=uploadResult.getPowerOutput();
如果(每月){
功率输出+=月平均值(月);
}
月平均功率(月、功率输出);
}
系统输出打印项次(月地图);

您可以使用streams获得所需结果的映射

 Map<String, Double> collect = uploadResults.stream().collect(
            Collectors.groupingBy(Entry::getMonth, Collectors.summingDouble(Entry::getPowerOutput)));
编辑:

对于低于Java8的版本,这应该可以

Map<String, Float> monthMap = new HashMap<>();
for (Entry uploadResult : uploadResults) {
    String month = uploadResult.getMonth();
    Float powerOutput = uploadResult.getPowerOutput();

    if( monthMap.containsKey(month) ){
        powerOutput += monthMap.get(month);
    }
    monthMap.put( month, powerOutput);
}
System.out.println(monthMap);
Map monthMap=newhashmap();
for(条目uploadResult:uploadResults){
String month=uploadResult.getMonth();
Float powerOutput=uploadResult.getPowerOutput();
如果(每月){
功率输出+=月平均值(月);
}
月平均功率(月、功率输出);
}
系统输出打印项次(月地图);


什么是
Entry
这里?哦,对不起,这是我的课,我应该向大家展示一下tooTip:在将日期存储为文本时使用标准ISO 8601格式:YYYY-MM-DD。什么是
Entry
这里?哦,对不起,这是我的课,我应该向大家展示tooTip:在将日期存储为文本时使用标准ISO 8601格式:YYYY-MM-DD。如果我这样做,那么在sum,variable not initializedEdit下会出现错误:您需要
float sum=0在循环之前。如果我这样做,那么在sum,variable not initializedEdit下会出现错误:您需要
float sum=0在循环之前。好的,我导入了它,但是现在我在map和Collector下得到了错误。我是否需要在java中导入一些东西来使用它们?只有在使用java8+时,这才有效。导入应该是
import java.util.*;导入java.util.stream.collector哦,该死,我想我的课程使用的是Java7,你知道如何手动操作吗?我曾考虑在if语句中使用一组for循环,但我想不出来。你可以用这个。这是精心设计的版本。我得到的唯一错误是在第一个贴图下,找不到符号。好的,我导入了它,但现在我在贴图和收集器下得到错误。我是否需要在java中导入一些东西来使用它们?只有在使用java8+时,这才有效。导入应该是
import java.util.*;导入java.util.stream.collector哦,该死,我想我的课程使用的是Java7,你知道如何手动操作吗?我曾考虑在if语句中使用一组for循环,但我想不出来。你可以用这个。这是一个精心制作的版本。唯一的错误是在第一张地图下,找不到符号。