반응형
Stream을 이용한 2중 for문
우리는 2중 for문을 종종 사용해야할 때가 있다.
Stream을 이용하여 2중 for문을 구현해보자.
상황
public static void main(String[] args) {
List<String> list1 = Arrays.asList("a", "b", "c", "d", "e");
List<String> list2 = Arrays.asList("a", "b", "d");
// 2중 for문은 stream으로 어떻게 작성할까?
// 만약 for문을 돌면서 같은 것만 list에 담고 싶다면?
// 8버전 이전
List<String> result1 = new ArrayList<>();
for(String str1 : list1){
for(String str2 : list2){
if(str1.equals(str2)){
result1.add(str1);
}
}
}
for(String str : result1){
System.out.print(str);
}
System.out.println();
// 8버전 (stream 이용)
List<String> result2 =
list1.stream()
.filter(str -> list2.stream().anyMatch(Predicate.isEqual(str)))
.collect(Collectors.toList());
result2.stream().forEach(System.out::print);
}
filter 메소드를 사용하여 중간처리를 한다.
stream의 xxxMatch메소드를 이용하여 매칭되는 element를 찾는다.
- noneMatch => 불일치 데이터 필터링
- anyMatch => 일치 데이터 필터링
- allMatch => 모두 일치하는 데이터 필터링
세 가지 Match가 존재한다.
반응형
'그 외 ... (정리해야함) > 꿀팁' 카테고리의 다른 글
RestTemplate 한글 깨짐관련(StringHttpMessageConverter) (0) | 2020.03.03 |
---|---|
Springboot에서 H2데이터베이스 콘솔 설정하기 (0) | 2019.08.07 |
윈도우 PC 키보드 MAC에서 사용하는 법 (0) | 2019.06.30 |
[Intellij] 컴파일 오류 (0) | 2019.04.22 |
Eclipse에서 문자열 일괄 변경 (0) | 2019.04.18 |