现在去看三年前的问题
有个问题是这样的,统计一年每个月的销售量。看起来很简单,两个数组直接搞定?NO,这次是另外一种方式。
忽然想起刚接触Java的时候,想法就是上面的那样。很简单,粗暴,但是不易扩展,后期完全改不了。很久之后去看半年前写的程序,就会发现很多不认识。最近这种感觉太深切了,所以在一开始的时候,就想好怎么去做,怎么去完成。
好吧。上面都是废话。
最近一直在准备SSL的事情,但是很可惜,失败了。因为,因为,引用的站外资源太多了!!!
问题总要解决
注意:最小Jdk版本为1.8
这是一个实体,定义了月份和金额,重写了toString()方法:
class Sales {
public Month getMonth() {
return month;
}
public void setMonth(Month month) {
this.month = month;
}
private Month month;
public double getSales() {
return sales;
}
public void setSales(double sales) {
this.sales = sales;
}
private double sales;
@Override
public String toString() {
return "month->" + getMonth() + ",sales->" + getSales();
}
}
下面是计算的部分,主要使用了Java 1.8里面stream的概念,这个东西特别方便,主要是方便在哪方面呢?主要在可以把集合都转换成stream(流)然后进行各项操作。
/**
* @author puruidong
* @version 2015-07-10
*/
public class Main {
private static final double monthlySales[] = new double[12];
private static final String[] monthArray = {"January", "February", "March", "April", "May",
"June", "July", "August", "September", "October",
"November", "December"};
private Set
public void totalSales() {
double count = salesList.stream().mapToDouble(new ToDoubleFunction
@Override
public double applyAsDouble(Sales value) {
return value.getSales();
}
}).sum();//通过stream的方式进行总和计算.
System.out.println("total->" + count);
}
static void averageSales() {
}
static void highestMonth() {
}
static void lowestMonth() {
}
public void showSales() {
salesList.forEach((x) -> {
System.out.println(x.toString());
});
}
public void getSalesUsingNonStaticMethodWhichBelongsToInstanceAndRecommended(Scanner sc) {
int i = 0;
while (i <= 11) {
System.out.println("Please enter a month to be recorded?(1-12)");
int months = sc.nextInt();
Sales sales = new Sales();
switch (Month.of(months)) {//Month是Java 1.8中新增的枚举类.
case JANUARY:
sales.setMonth(Month.JANUARY);
break;
case FEBRUARY:
sales.setMonth(Month.FEBRUARY);
break;
case MARCH:
sales.setMonth(Month.MARCH);
break;
case APRIL:
sales.setMonth(Month.APRIL);
break;
case MAY:
sales.setMonth(Month.MAY);
break;
case JUNE:
sales.setMonth(Month.JUNE);
break;
case JULY:
sales.setMonth(Month.JUNE);
break;
case AUGUST:
sales.setMonth(Month.AUGUST);
break;
case SEPTEMBER:
sales.setMonth(Month.SEPTEMBER);
break;
case OCTOBER:
sales.setMonth(Month.OCTOBER);
break;
case NOVEMBER:
sales.setMonth(Month.NOVEMBER);
break;
case DECEMBER:
sales.setMonth(Month.DECEMBER);
break;
default:
System.err.println("--input error--");
break;
}
if (sales.getMonth() != null) {
sc.reset();
System.out.println("Please enter turnover:");
double turnover = sc.nextDouble();
sales.setSales(turnover);
salesList.add(sales);
}
i++;
}
showSales();
System.out.println("----------------------------");
totalSales(); } public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Main salesTracking = new Main();
salesTracking.getSalesUsingNonStaticMethodWhichBelongsToInstanceAndRecommended(input);
}//end main }//end class
看到这,快去更新Java 1.8吧.
此文成形于对一位网友的回复,原帖在此.