第9編ストリームによるデータ収集---集約と要約

4328 ワード

/**
 *      Collectors                ,          
 *  :           !
 *         ,             ,        (Stream  collect
 *    )。       ,                       。      
 *      ,               ,         ——         
 *    。             
 */
public class Demo01 {
    public static void main(String[] args) {
        List menues = Arrays.asList(new Dish("rice", true, 10000, Dish.Type.FISH), new Dish("meate", false, 20000, Dish.Type.FISH), new Dish("dog", true, 30000, Dish.Type.FISH));
//        test01(menues);
//        test02(menues);
//        test03(menues);
//        test04(menues);
//        test05(menues);
        test06(menues);
    }


    /**
     *              List 
     */
    public static void test01(List menues) {
        List dishes = menues.stream().collect(toList());

    }

    /**
     *   counting          ,         
     *   
     *
     * @param menues
     */
    public static void test02(List menues) {
        Long count = menues.stream().collect(counting());
        System.out.println(count);
        long count2 = menues.stream().count();
        System.out.println(count2);
    }

    /**
     *             :
     *                 
     *      Optional     。       ,     “  menu  
     *    ”。          !Java 8   Optional,      ,        
     *    。                      
     *
     * @param menues
     */
    public static void test03(List menues) {
        Optional optionalDish = menues.stream().collect(maxBy(comparing(Dish::getCalories)));
        if (optionalDish.isPresent()) {
            System.out.println("      :" + optionalDish.get().getCalories());
        } else {
            System.out.println("    ,   !");
        }
        Optional optionalDish2 = menues.stream().collect(maxBy(comparingInt(Dish::getCalories)));
        Optional optionalDish3 = menues.stream().max(comparing(Dish::getCalories));
        if (optionalDish3.isPresent()) {
            System.out.println("      :" + optionalDish.get().getCalories());
        } else {
            System.out.println("    ,   !");
        }
        Optional minCalory = menues.stream().min(comparing(Dish::getCalories));
        if (minCalory.isPresent()) {
            System.out.println("      :" + optionalDish.get().getCalories());

        } else {
            System.out.println("    ,   !");
        }
    }

    /**
     *   :
     * Collectors               :Collectors.summingInt。     
     *            int   ,        ;           collect 
     *               。      ,               
     *          6-2  。     ,             ,      
     *          (      0)。
     * Collectors.summingLong Collectors.summingDouble         ,   
     *       long double   。
     *
     * @param menues
     */
    public static void test04(List menues) {
        Integer sumCalory = menues.stream().collect(summingInt(Dish::getCalories));
        System.out.println("    :" + sumCalory);
        int sum = menues.stream().mapToInt(Dish::getCalories).sum();
        System.out.println("    :" + sum);

    }

    /**
     *   :    
     *
     * @param menues
     */
    public static void test05(List menues) {
        Double avgCalory = menues.stream().collect(averagingInt(Dish::getCalories));
        System.out.println(avgCalory);
    }

    /**
     *   :
     *      ,                      ,           
     *        ,           。      ,               
     *   ,                。      ,     summarizingInt  
     *         。  ,    summarizing                ,  
     *        、   、       
     *
     * @param menues
     */
    public static void test06(List menues) {
        IntSummaryStatistics collectCalory = menues.stream().collect(summarizingInt(Dish::getCalories));
        System.out.println(collectCalory.toString());
        System.out.println("max:" + collectCalory.getMax() + ";min:" + collectCalory.getMin() + ";avg:" + collectCalory.getAverage() + ";sum" + collectCalory.getSum() + ";count" + collectCalory.getCount());
    }
}
git hub : https://github.com/wangrui0