Duyệt tất cả các phần tử của Enum trong Java

Enum là tập hợp của một số hằng số định nghĩa trước trong Java. Ví dụ 1 Gender enum chứa một tập hằng số (Male, Female, Other). Trong bài viết này chúng ta sẽ cùng nhau tìm cách duyệt tất cả các phần tử của một enum cho trước.

Duyệt Enum trong Java

Trước tiên chúng ta tạo một DaysOfWeekEnum

public enum DaysOfWeekEnum {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY
}

Duyệt Enum sử dụng values() method

Enum không có các hàm hỗ trợ duyệt các phần tử như forEach(), iterator(). Nhưng chúng ta có thể sử dụng values() trả về một mảng các phần tử trong Enum.

public class Main {

    public static void main(String[] args)  {
        DaysOfWeekEnum[] arr = DaysOfWeekEnum.values();
        for (DaysOfWeekEnum day : arr) {
            System.out.println(day);
        }
    }
}

Duyệt Enum sử dụng Stream API

Việc sử dụng values() trả về một mảng các phần tử của Enum, chúng ta có thể sử dụng Stream API để duyệt các phần tử của enum, ngoài ra chúng ta còn có thể thao tác thêm một số tác vụ như filter, map etc mà Stream API cung cấp.

Để tạo ra một Stream của DaysOfWeekEnum chúng ta có thể sử dụng Stream.of.

Stream.of(DaysOfWeekEnum.values());

Hoặc có sử dụng Arrays.stream.

Arrays.stream(DaysOfWeekEnum.values());

Để thú vị hơn, mình sẽ update DaysOfWeekEnum một chút để ví dụ sinh động hơn.

public enum DaysOfWeekEnum {
    SUNDAY("off"),
    MONDAY("working"),
    TUESDAY("working"),
    WEDNESDAY("working"),
    THURSDAY("working"),
    FRIDAY("working"),
    SATURDAY("off");

    private String typeOfDay;

    DaysOfWeekEnum(String typeOfDay) {
        this.typeOfDay = typeOfDay;
    }

    public static Stream<DaysOfWeekEnum> stream() {
        return Stream.of(DaysOfWeekEnum.values());
    }

    public String getTypeOfDay() {
        return typeOfDay;
    }
}

Giờ mình sẽ duyệt và lọc ra các ngày nghỉ trong ngày từ DaysOfWeekEnum.

public class Main {

    public static void main(String[] args)  {
        DaysOfWeekEnum.stream()
                .filter(d -> d.getTypeOfDay().equals("off"))
                .forEach(System.out::println);
    }
}

Output
SUNDAY
SATURDAY

Duyệt Enum sử dụng EnumSet

EnumSet là một cấu trúc dữ liệu đặc biệt để làm việc với các kiểu dữ liệu Enum trong Java.

public class Main {

    public static void main(String[] args)  {
        EnumSet.allOf(DaysOfWeekEnum.class)
                .forEach(System.out::println);

    }
}

Tóm lược

Vậy là mình đã giới cho các bạn cách để duyệt các giá trị của một Enum trong Java sử dụng Stream API, values() method. Ngoài ra khi đã có một đối tượng Stream của Enum chúng ta có thể sử dụng các tính năng của nó như forEach, map etc.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x