728x90
아래 코드를 보자
public class StreamTest {
@Test
void test() {
List<String> list = List.of("rainsister.tistory.com", "rainsisters.tistory.com", "rainsister.com", "www.rainsisters.com");
List<String> result = list.stream()
.filter(e -> e.contains("rainsisters.tistory.com"))
.filter(e -> e.length() > 17)
.toList();
System.out.println(result);
}
}
혹시 toList() 에 대해서 궁금하지 않은가 ? 요놈은 java 16에서 등장하는 놈이다. 바로 Stream -> List 로 직접 전환해주는 놈이다. java 8 을 사용한 친구라면 안될껄? 그래서 아래 코드들을 테스트 해보려면 아무래도 java 16 이상은 되어야 겠지?
만일 java8 에서는 어떻게 쓸가?
List<String> result = list.stream()
.filter(e -> e.contains("rainsisters.tistory.com"))
.filter(e -> e.length() > 17)
.collect(Collectors.toList());
Stream.toList() 와 Stream.collect(Collectors.toList()) 의 차이점
Stream.toList() 의 내부 코드를 확인 해보면
default List<T> toList() {
return (List<T>) Collections.unmodifiableList(new ArrayList<>(Arrays.asList(this.toArray())));
}
Stream.toList()는 불변의 List를 만든다. 하지만 Stream.collect(Collectors.toList()) 는 일반 List를 만들어낸다. 때문에 추가,삭제작업이 가능하다.
그러면 Collectors 로 불변의 List를 만들려면 어떻게 쓰면 될깡?????
바로 Collectors.toUnmodifiableList() 를 쓰면 된다.
아래와 같이
List<String> result = list.stream()
.filter(e -> e.contains("rainsisters.tistory.com"))
.filter(e -> e.length() > 17)
.collect(Collectors.toUnmodifiableList());
그리고 아쉽게도 Collectors.toUnmodifiableList() 는 java 10 부터 지원하는 함수다 ㅜ.ㅜ
어서 빨리들 java 버전을 업그레이드 하라!
끝!
'Back-end > Spring&SpringBoot' 카테고리의 다른 글
System.currentTimeMillis 말고 ? (0) | 2022.12.19 |
---|---|
java 에서 불변의 컬렉션을 생성하는 방법 (0) | 2022.12.13 |
Stream.toList() vs Collectors.toList() 성능비교 (0) | 2022.12.13 |
SpringBoot + SpringSecurity +JWT = RBAC (0) | 2022.12.13 |
전략패턴으로 if...else 늪에서 빠져나오기 (0) | 2022.12.08 |