카테고리 없음
기본 문법 복습 (8) 람다식과 메소드참조
개발하는 멍발자
2022. 4. 22. 15:41
record에서는 인수도 메소드를 호출하는 방식으로 사용하는 게 규칙이다.
그러므로 record 인수도 ()를 해 주는 것이 좋다.
public class InstanceMethodSample {
record Student(String name, int englishScore, int mathScore){} //레코드는 중괄호 처리
public static void main(String[] args) {
var sage = new Student("sage", 60, 80); // int는 ""하지 말기
var a = average(sage);
System.out.println("평균점수: %d".formatted(a));
}
static int average(Student s) { //인스턴트의 Student를 가져와서 넣은 것
return (s.englishScore() + s.mathScore()) / 2; // ()소괄호 필수
}
}
//결과
평균점수: 70
이름 넣어서 확장하기
public class InstanceMethodSample {
record Student(String name, int englishScore, int mathScore) {
//레코드는 중괄호 처리
int average() {
return (this.englishScore() + this.mathScore()) / 2;
}
int sum() {
return this.englishScore() + this.mathScore();
}
void showResult() {
System.out.println(this.name() + "님의 평균점수는 " + average() + "점입니다.");
}
}
public static void main(String[] args) {
var sage = new Student("sage", 60, 80);
var a = sage.average();
var s = sage.sum();
System.out.println("합계: %d".formatted(s));
System.out.println("평균점수: %d".formatted(a));
sage.showResult();
}
static int average(Student s) {
return (s.englishScore() + s.mathScore()) / 2;
}
}
//결과
합계: 140
평균점수: 70
sage님의 평균점수는 70점입니다.
람다식
람다식은 익명 메소드다
메소드를 람다식으로, 람다식을 메소드로 바꾸는 문제
boolean check(String s) { // 1. 이 메소드를 람다식으로 바꾸기
return s.contains("y");
}
s -> s.contains("y") // 1번 답
void print(String s) { // 2. 이 메소드를 람다식으로 바꾸기
S
s -> System.out.println(s) // 2번 답
s -> s.toUpperCase() // 3. 람다식을 메소드로 바꾸기
String upper(String s) {
return s.toUpperCase(); //3번의 답
s -> s.isEmpty() // 4.람다식을 메소드로 바꾸기
boolean empty(String s) {
return s.isEmpty(); // 4번 답
}
람다식으로 메소드 참조로 변환
인수 -> 무엇인가? 메소드 (인수) => 무엇인가::메소드
인수 -> 인수.메소드() => 메소드가 속한 클래스명::메소드
<람다식>
var names = List.of("홍길동", "이순신", "신사임당");
names.forEach(s -> System.out.println(s));
<메소드 참조>
var names = List.of("홍길동", "이순신", "신사임당");
names.forEach(System.out::println);
<메소드 참조와 람다식 변환>
names.stream().map(s -> s.toUpperCase()).toList() // 람다식
names.stream().map(String::toUpperCase).toList() // 메소드 참조
names.stream().map(s -> "%s님".formatted(s)).toList() // 람다식
names.stream().map("%s님"::formatted).toList() //메소드 참조
names.stream().map(String::toLowerCase).toList() // 메소드 참조
names.stream().map(s -> s.toLowerCase()).toList() //람다식
메소드 체인
jshell> var items = String.join("와 ", "참외", "오이")
items ==> "참외와 오이"
jshell> "쇼핑은 %s로 %d로".formatted(items, 8000)
$5 ==> "쇼핑은 참외와 오이로 8000로"
"three times".repeat("abc".length())을 변수를 사용하여 분해하기
jshell> var thing = "abc".length()
thing ==> 3
jshell> "three times".repeat(thing)
$7 ==> "three timesthree timesthree times"