2019-02-18 EnumSet Enum练习

2019-02-18  本文已影响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");
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读