美文网首页
2019-02-18 EnumSet Enum练习

2019-02-18 EnumSet Enum练习

作者: 暖熊熊 | 来源:发表于2019-02-18 18:07 被阅读0次

    EnumSet在处理枚举类数据时,非常不错,

    package com.ghw.springboot.A0218;
    
    /**
     * 周一到周日
     */
    public enum Day {
        周一, 周二, 周三, 周四, 周五, 周六, 周天
    }
    
    package com.ghw.springboot.A0218;
    
    import java.util.Set;
    
    public class Worker {
        private String name;
        private Set<Day> workDays;
    
        public Worker() {
        }
    
        public Worker(String name, Set<Day> workDays) {
            this.name = name;
            this.workDays = workDays;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Set<Day> getWorkDays() {
            return workDays;
        }
    
        public void setWorkDays(Set<Day> workDays) {
            this.workDays = workDays;
        }
    
        @Override
        public String toString() {
            return "Worker{" +
                    "name='" + name + '\'' +
                    ", workDays=" + workDays +
                    '}';
        }
    }
    
    package com.ghw.springboot.A0218;
    
    import java.util.*;
    
    import static com.ghw.springboot.A0218.Day.*;
    
    public class Test {
        public static void main(String[] args) {
            Worker[] workers = new Worker[]{
                    new Worker("张三", EnumSet.of(周一, 周二, 周三, 周五)),
                    new Worker("李四", EnumSet.of(周二, 周四, 周六)),
                    new Worker("王五", EnumSet.of(周二, 周四)),
            };
            System.out.println(getNoWorkDay(workers) + "无人工作");
            System.out.println(getDayLeast1People(workers) + "至少会有一个人来");
            System.out.println(getDayLeast2People(workers) + "至少会有两个人来");
            System.out.println(getPeopleWorkOnMonAndTue(workers) + "周一和周二都会来");
    
        }
    
        /**
         * 问题1:哪一天没有人工作,思路,先把周一-周天 加入Set,然后遍历工人,将工人工作的天移除出去,剩下的就是无人工作日
         *
         * @param workers 工人集合
         * @return 日期集合
         */
        private static Set<Day> getNoWorkDay(Worker[] workers) {
            Set<Day> noWorkDays = EnumSet.allOf(Day.class);
            for (Worker worker : workers) {
                noWorkDays.removeAll(worker.getWorkDays());
            }
            return noWorkDays;
        }
    
        /**
         * 问题2:有哪些天至少会有一个人来?
         *
         * @param workers 工人集合
         * @return 日期集合
         */
        private static Set<Day> getDayLeast1People(Worker[] workers) {
            Set<Day> leastOnePeopleDays = EnumSet.noneOf(Day.class);
            for (Worker worker : workers) {
                leastOnePeopleDays.addAll(worker.getWorkDays());
            }
            return leastOnePeopleDays;
        }
    
        /**
         * 问题3:有哪些天至少会有两个人来?
         * 疑惑:这个问题用平台的HashSet也可以,但是用EnumSet效率高,是元操作 。
         *
         * @param workers 工人集合
         * @return 日期集合
         */
        private static Set<Day> getDayLeast2People(Worker[] workers) {
            Set<Day> least2PeopleDays = EnumSet.noneOf(Day.class);
            Map<Day, Integer> map = new EnumMap<>(Day.class);
            for (Worker worker : workers) {
                for (Day day : worker.getWorkDays()) {
                    map.put(day, map.get(day) == null ? 1 : map.get(day) + 1);
                }
            }
            for (Map.Entry<Day, Integer> entry : map.entrySet()) {
                if (entry.getValue() >= 2) {
                    least2PeopleDays.add(entry.getKey());
                }
            }
            return least2PeopleDays;
        }
    
        /**
         * 问题3:哪些人周一和周二都会来?
         *
         * @param workers 工人集合
         * @return 日期集合
         */
        private static Set<String> getPeopleWorkOnMonAndTue(Worker[] workers) {
            Set<String> names = new HashSet<>();
            for (Worker worker : workers) {
                if (worker.getWorkDays().containsAll(EnumSet.of(周一, 周二))) {
                    names.add(worker.getName());
                }
            }
            return names;
        }
    }
    

    枚举类练习:

    package com.ghw.springboot.A0218;
    
    import static cn.hutool.core.lang.Console.print;
    
    public class EnumClass {
        enum Shrubbery {GROUND, CRAWLING, HANGING}
    
        public static void main(String[] args) {
            for (Shrubbery s : Shrubbery.values()) {
                print(s + " ordinal: " + s.ordinal() + "\n");
                print(s.compareTo(Shrubbery.CRAWLING) + " ");
                print(s.equals(Shrubbery.CRAWLING) + " ");
                print(s == Shrubbery.CRAWLING);
                print("\n" + s.getDeclaringClass());
                print("\n" + s.name());
                print("\n-------------------\n");
            }
    
            for (String s : "GROUND CRAWLING HANGING".split(" ")) {
                System.out.println(Enum.valueOf(Shrubbery.class, s));
                Shrubbery shrubbery = Shrubbery.valueOf(s);
                print(shrubbery + "\n");
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:2019-02-18 EnumSet Enum练习

          本文链接:https://www.haomeiwen.com/subject/unrzeqtx.html