Java에서 열거 형을 반복하는 'for'루프
나는이 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
문서에 나열되지 않습니다 .
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
}
자바 8
Stream.of(Direction.values()).forEach(System.out::println);
Java5 +에서
for ( Direction d: Direction.values()){
System.out.println(d);
}
각각에 대해 사용하십시오
for ( Direction direction : Direction.values()){
System.out.println(direction.toString());
}
Java 8의 추가 메소드 :
EnumSet
함께 사용forEach
EnumSet.allOf(Direction.class).forEach(...);
Arrays.asList
함께 사용forEach
Arrays.asList(Direction.values()).forEach(...);
참고URL : https://stackoverflow.com/questions/1104975/a-for-loop-to-iterate-over-an-enum-in-java
'Program Tip' 카테고리의 다른 글
여러 git 커밋을 되 돌리는 방법은 무엇입니까? (0) | 2020.09.28 |
---|---|
파이썬에서“assert”의 사용은 무엇입니까? (0) | 2020.09.28 |
heroku 코드를 배포 할 때 권한이 거부되었습니다 (공개 키). (0) | 2020.09.28 |
쉘 스크립트에서 부울 변수를 선언하고 사용하는 방법은 무엇입니까? (0) | 2020.09.28 |
파이썬 사전에서 'has_key ()'또는 'in'을 사용해야합니까? (0) | 2020.09.28 |