zoukankan      html  css  js  c++  java
  • 按子组收集数据

    package com.ant.jdk8.chap06;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    public class DishGroupDemo {
        public static void main(String[] args) {
            List<Dish> menu = Arrays.asList(
                    new Dish("pork", false, 800, Type.MEAT),
                    new Dish("beef", false, 700, Type.MEAT),
                    new Dish("chicken", false, 400, Type.MEAT),
                    new Dish("french fries", true, 530, Type.OTHER),
                    new Dish("rice", true, 350, Type.OTHER),
                    new Dish("season fruit", true, 120, Type.OTHER),
                    new Dish("pizza", true, 550, Type.OTHER),
                    new Dish("prawns", false, 300, Type.FISH),
                    new Dish("salmon", false, 450, Type.FISH) );
            Map<Type,Long> typesCount =
                    menu.stream().collect(Collectors.groupingBy(Dish::getType,Collectors.counting()));
            System.out.println(typesCount);
        }
    }
    

    package com.ant.jdk8.chap06;
    
    import java.util.*;
    import java.util.stream.Collectors;
    
    public class DishGroupDemo {
        public static void main(String[] args) {
            List<Dish> menu = Arrays.asList(
                    new Dish("pork", false, 800, Type.MEAT),
                    new Dish("beef", false, 700, Type.MEAT),
                    new Dish("chicken", false, 400, Type.MEAT),
                    new Dish("french fries", true, 530, Type.OTHER),
                    new Dish("rice", true, 350, Type.OTHER),
                    new Dish("season fruit", true, 120, Type.OTHER),
                    new Dish("pizza", true, 550, Type.OTHER),
                    new Dish("prawns", false, 300, Type.FISH),
                    new Dish("salmon", false, 450, Type.FISH) );
            Map<Type, Optional<Dish>> mostCaloriesByType =
                    menu.stream().collect(Collectors.groupingBy(Dish::getType,
                            Collectors.maxBy(Comparator.comparingInt(Dish::getCalories))));
            System.out.println(mostCaloriesByType);
        }
    }
    

    1. 把收集器的结果转换为另一种类型:

    package com.ant.jdk8.chap06;
    
    import java.util.*;
    import java.util.stream.Collectors;
    
    public class DishGroupDemo {
        public static void main(String[] args) {
            List<Dish> menu = Arrays.asList(
                    new Dish("pork", false, 800, Type.MEAT),
                    new Dish("beef", false, 700, Type.MEAT),
                    new Dish("chicken", false, 400, Type.MEAT),
                    new Dish("french fries", true, 530, Type.OTHER),
                    new Dish("rice", true, 350, Type.OTHER),
                    new Dish("season fruit", true, 120, Type.OTHER),
                    new Dish("pizza", true, 550, Type.OTHER),
                    new Dish("prawns", false, 300, Type.FISH),
                    new Dish("salmon", false, 450, Type.FISH) );
            Map<Type, Dish> mostCaloriesByType =
                    menu.stream().collect(Collectors.groupingBy(Dish::getType,
                            Collectors.collectingAndThen(
                                    Collectors.maxBy(Comparator.comparingInt(Dish::getCalories)),Optional::get)));
            System.out.println(mostCaloriesByType);
        }
    }

    2. 与groupingBy联合使用的其他收集器的例子:

    package com.ant.jdk8.chap06;
    
    import java.util.*;
    import java.util.stream.Collectors;
    
    public class DishGroupDemo {
        public static void main(String[] args) {
            List<Dish> menu = Arrays.asList(
                    new Dish("pork", false, 800, Type.MEAT),
                    new Dish("beef", false, 700, Type.MEAT),
                    new Dish("chicken", false, 400, Type.MEAT),
                    new Dish("french fries", true, 530, Type.OTHER),
                    new Dish("rice", true, 350, Type.OTHER),
                    new Dish("season fruit", true, 120, Type.OTHER),
                    new Dish("pizza", true, 550, Type.OTHER),
                    new Dish("prawns", false, 300, Type.FISH),
                    new Dish("salmon", false, 450, Type.FISH) );
            Map<Type, Integer> totalCaloriesByType =
                    menu.stream().collect(Collectors.groupingBy(Dish::getType,
                            Collectors.summingInt(Dish::getCalories)));
            System.out.println(totalCaloriesByType);
        }
    }

    package com.ant.jdk8.chap06;
    
    import java.util.*;
    import java.util.stream.Collectors;
    
    public class DishGroupDemo {
        public static void main(String[] args) {
            List<Dish> menu = Arrays.asList(
                    new Dish("pork", false, 800, Type.MEAT),
                    new Dish("beef", false, 700, Type.MEAT),
                    new Dish("chicken", false, 400, Type.MEAT),
                    new Dish("french fries", true, 530, Type.OTHER),
                    new Dish("rice", true, 350, Type.OTHER),
                    new Dish("season fruit", true, 120, Type.OTHER),
                    new Dish("pizza", true, 550, Type.OTHER),
                    new Dish("prawns", false, 300, Type.FISH),
                    new Dish("salmon", false, 450, Type.FISH) );
            Map<Type, Set<CaloricLevel>> caloricLevelByType =
                    menu.stream().collect(Collectors.groupingBy(Dish::getType,
                            Collectors.mapping(d->{if(d.getCalories()<=400) return CaloricLevel.DIET;
                            else if(d.getCalories()<=700) return CaloricLevel.NORMAL;
                            else return CaloricLevel.FAT;},
                                    Collectors.toSet())));
            System.out.println(caloricLevelByType);
        }
    }
    

  • 相关阅读:
    获取Android状态栏高度的屡试不爽的方法
    在线音乐API的研究 (Part 2.1)
    Zabbix
    利用 Puppet 实现自动化管理配置 Linux 计算机集群
    django的admin后台管理如何更改为中文
    windows系统安装python3.6.3和python3.7.0
    微课程--Android--高级控件之二--标题栏
    微课程--Android--高级控件之一ListView
    微课程--Android--Fragement
    微课程--Android--界面布局总结
  • 原文地址:https://www.cnblogs.com/i-hard-working/p/9595879.html
Copyright © 2011-2022 走看看