g라는 int형 배열에서 g[idx] 값이 0인 idx 를 "루트노드" 라고 하고, 이 루트노드를 찾는 상황이라고 가정.
이제까지 for문을 사용해 탐색해왔는데 요즘도 이렇게 하나? 라는 생각이 들었다.
python에서 range 사용하는 것 처럼 할 수는 없을까? stream에 있을 것 같은데..라고 생각하며 찾아보았다.
IntStream 이라는 것은 처음 사용해보았다.
public static int findRoot(int[] g){
return IntStream.range(0, g.length)
.filter(i -> g[i] == 0)
.findAny().getAsInt();
}
물론 findAny() 는 Optional을 리턴하기 때문에 Optional로 리턴하게 하여, null인 경우에 대한 예외처리는 리턴 받는 쪽에서 해주는게 좋을 듯 하다.
https://www.developer.com/project-management/stream-operations-supported-by-the-java-streams-api/
'Java' 카테고리의 다른 글
타입 및 클래스들 사이에 존재하는 각 종 관계들과 리스코프 치환 원칙 (0) | 2023.03.24 |
---|---|
Java 에서 Stack 구현체로는 무엇을 사용해야할까?(feat_Java로 코딩테스트 문제 풀기) (0) | 2022.09.02 |
record 의 생성자를 private 으로 만드는 것이 불가능한 이슈 (0) | 2022.08.23 |
[Java] method final parameter ? (0) | 2022.07.27 |
[Java] ImmutableCollection 과 UnmodifiableCollection 과 Immutability (0) | 2022.05.31 |