나는이 enum
추기경 및 중간 길 자바를 :
public enum Direction {
NORTH,
NORTHEAST,
EAST,
SOUTHEAST,
SOUTH,
SOUTHWEST,
WEST,
NORTHWEST
}
for
이러한 각enum
값 을 반복 하는 루프를 작성하려면 어떻게 해야합니까?
답변
.values()
values()
열거 형 에서 메소드를 호출 할 수 있습니다 .
for (Direction dir : Direction.values()) {
// do what you want
}
이 values()
메소드는 컴파일러에 의해 암시 적으로 선언됩니다 . 따라서 Enum
문서에 나열되어 있지 않습니다 .
답변
열거 형의 모든 상수 public static T[] values()
는 해당 유형 의 암시 적 메서드를 호출하여 얻을 수 있습니다 .
for (Direction d : Direction.values()) {
System.out.println(d);
}
답변
다음과 같이 할 수 있습니다 :
for (Direction direction : EnumSet.allOf(Direction.class)) {
// do stuff
}
답변
스트림
Java 8 이전
for (Direction dir : Direction.values()) {
System.out.println(dir);
}
자바 8
람다와 스트림을 사용할 수도 있습니다 ( Tutorial ).
Stream.of(Direction.values()).forEachOrdered(System.out::println);
왜 스트림을 사용 forEachOrdered
하지 forEach
않습니까?
의 동작이 forEach
명확하게 결정적되는 위치로서 forEachOrdered
수행 스트림 정의 발생 순서를 갖는 경우, 스트림의 발생 순서 스트림의 각 요소에 대한 작업. 따라서 forEach
주문이 유지된다는 보장은 없습니다.
또한 스트림 (특히 병렬 스트림)으로 작업 할 때 스트림의 특성을 명심하십시오. 당으로 문서 :
스트림 파이프 라인 결과는 스트림 조작에 대한 동작 매개 변수가 상태 저장 인 경우 비 결정적이거나 올바르지 않을 수 있습니다. 상태 저장 람다는 결과는 스트림 파이프 라인 실행 중에 변경 될 수있는 모든 상태에 따라 달라집니다.
Set<Integer> seen = Collections.synchronizedSet(new HashSet<>());
stream.parallel().map(e -> { if (seen.add(e)) return 0; else return e; })...
여기서 매핑 작업이 병렬로 수행되는 경우 스레드 예약 차이로 인해 동일한 입력에 대한 결과가 실행마다 달라질 수 있지만 상태 비 저장 람다 식의 경우 결과는 항상 동일합니다.
스트림 작동에 대한 동작 매개 변수의 부작용은 일반적으로 무단으로 무국적 요구 사항 위반 및 기타 스레드 안전 위험을 초래할 수 있으므로 권장하지 않습니다.
스트림은 정의 된 만남 순서를 갖거나 갖지 않을 수 있습니다. 스트림에 발생 순서가 있는지 여부는 소스 및 중간 작업에 따라 다릅니다.
답변
for(Direction dir : Direction.values())
{
}
답변
주문에 신경 쓰지 않으면 작동합니다.
Set<Direction> directions = EnumSet.allOf(Direction.class);
for(Direction direction : directions) {
// do stuff
}
답변
for (Direction d : Direction.values()) {
//your code here
}
