1. 코드리뷰
// "python", "java", "javascript","c","c++","c#"
// C로 시작하는 프로그래밍 언어 추출
/* .startsWith()는 String 클래스의 매소드로서 ()안의 값이 문자열에 있는지를 boolean으로 반환
.filter()는 ()안의 조건에 맞는 요소만 골라서 만든 새 스트림을 반환 */
Arrays.stream(langs).filter(x-> x.startsWith("c")).forEach(System.out::println);
System.out.println("-----------------------------------------");
// java 라는 글자를 포함하는 언어
Arrays.stream(langs).filter(x-> x.contains("java")).forEach(System.out::println);
System.out.println("-----------------------------------------");
// 4글자 이하의 언어를 뽑아서 정렬한 뒤 출력
/*컬렉션 프레임워크는 클래스에 stream 만드는 매소드가 따로 있어서 객체는 그거 쓰면 된다.*/
langList.stream().filter(x-> x.length()<=4).sorted().forEach(System.out::println);
System.out.println("-----------------------------------------");
//4글자 이하의 언어 중에서 c 라는 글자를 포함하는 언어
langList.stream()
.filter(x -> x.length()<=4)
.filter(x -> x.contains("c"))
.forEach(System.out::println);
System.out.println("-----------------------------------------");
// 4글자 이하의 언어 중에서 c라는 글자를 포함하는 언어가 하나라도 있는지 여부
// anymatch: ()안의 조건을 스트림의 데이터 중 하나라도 만족하면 true 반환
// allmatch: ()안의 조건을 스트림의 데이터들이 전부 만족하면 true 반환
boolean anyMatch = langList.stream()
.filter(x->x.length()<=4)
.anyMatch(x-> x.contains("c"));
System.out.println(anyMatch);
System.out.println("-----------------------------------------");
// 3글자 이하의 언어들은 모두 c라는 글자를 포함하는지 여부
boolean allMatch = langList.stream()
.filter(x->x.length()<=3)
.allMatch(x-> x.contains("c"));
System.out.println(allMatch);
System.out.println("-----------------------------------------");
// 4글자 이하의 언어 중에서 c라는 글자를 포함하는 언어 뒤에 (어려워요) 라는 글자를 함께 출력
// map()은 스트림의 요소들을 함수의 인수로 전달한다. 해당 함수의 반환값들로 새 스트림 만들어 반환한다.
langList.stream()
.filter(x->x.length()<=4)
.filter(x->x.contains("c"))
.map(x -> x + "(어려워요)") //람다식은 String f(String x) {return x+"(어려워요)"}랑 같은 말
.forEach(System.out::println);
System.out.println("-----------------------------------------");
// c라는 글자를 포함하는 언어를 대문자로 출력
langList.stream()
.filter(x -> x.contains("c"))
.map(String::toUpperCase)
.forEach(System.out::println);
System.out.println("-----------------------------------------");
// c 라는 글자를 포함하는 언어를 대문자로 변경하여 리스트로 저장
List<String> langListStratsWithC = langList.stream()
.filter(x -> x.contains("c"))
.map(String::toUpperCase)
.collect(Collectors.toList());
langListStratsWithC.stream().forEach(System.out::println);
**참고** 매소드 참조
// 스트림 연산을 거칠 때, 람다식은 매소드 참조로 더 쉽게 표현 가능.
// 매소드 참조 시, 인수를 받는 부분이 없지만,
// 전 스트림 연산에서 반환된 값을 자동으로 인수로 받아 처리하므로 걱정없다.
// 매소드 참조의 형태는 다음과 같다. // 클래스이름::매소드이름
//예시1)
.forEach(n -> System.Out.println(n));
.forEach(System.out::println);
//예시2)
.map(n -> String.toUpperCase(n))
.map(String::toUpperCase)
2. 스스로 해보기
package WorkOut_Myself;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class Stream_intensiveCourse {
public static void main(String[] args) {
ArrayList<String> name = new ArrayList<>(Arrays.asList("김박사","임용한 교수님","이박사","윤영 시발롬","프로이트","김규한"));
// C로 시작하는 프로그래밍 언어만 출력, java 라는 글자 포함하는 언어만 출력
System.out.println("<<C로 시작하는 프로그래밍 언어만 출력>>");
name.stream().filter(n -> n.startsWith("김")).forEach(System.out::println);
System.out.println();
System.out.println("<<java 라는 글자 포함하는 언어만 출력>>");
name.stream().filter(n -> n.contains("박사")).forEach(System.out::println);
System.out.println("--------------------------------------------");
// 4글자 이하 언어 뽑아서 정렬 뒤 출력
System.out.println("<<4글자 이하 언어 뽑아서 정렬 뒤 출력>>");
name.stream().filter(n->n.length()>=4).sorted().forEach(System.out::println);
System.out.println("--------------------------------------------");
// 4글자 이하 언어 중 C가 들어가는 말 있으면 true 반환 // 전부 C가 들어가면 true 반환
System.out.println("4글자 이하 언어 중 C가 들어가는 말 있으면 true 반환");
boolean Yoon = name.stream().filter(n -> n.length() >= 4).anyMatch(n -> n.contains("윤영"));
System.out.println(Yoon);
System.out.println("전부 C가 들어가면 true 반환");
boolean Yoon2 = name.stream().filter(n -> n.length() >= 4).allMatch(n -> n.contains("윤영"));
System.out.println(Yoon2);
// 문자열 뒤에 다른 말 붙여서 출력
name.stream().filter(n->n.contains("윤영")).map(n -> n + " (개 싸가지 없는 새끼)").forEach(System.out::println);
// 전부 대문자로 출력
ArrayList<String> name2 = new ArrayList<>();
name2.add("john");
name2.add("Harry");
name2.add("son");
name2.add("Klusepski");
name2.add("Romero");
name2.stream().map(String::toUpperCase).forEach(System.out::println);
// C라는 말 포함한 언어 전부 대문자로 변경해서 새로운 리스트에 저장
System.out.println("----------------------------");
List<String> o = name2.stream().filter(n -> n.contains("o")).map(String::toUpperCase).collect(Collectors.toList());
o.stream().forEach(System.out::println);
}
}