AVA 람다식을 활용한 예제 (1)
TO Do.
- 디젤 자동차만 모두 찾기
- 10년보다 오래된 자동차만 모두 찾기
- 10년보다 오래된 디젤 자동차만 모두 찾기
- 디젤 자동차를 출력하되 모델과 연식만 나타나도록 출력
- 10년보다 오래된 자동차를 출력하되 모델, 연식, 주행거리만 출력
목표: 람다식을 활용하여 조건에 맞는 자동차 찾는 프로그램을 만들어보자!
1. 필요한 메서드와 인터페이스
■ 필요한 메서드
List<Car> findCars(List<Car> all, CarPredicate p)
List<Car>: 요구 조건에 맞는 차들
List<Car> all: 다양한 종류의 자동차
CarPredicate p: 요구조건
void printCars(List<Car> all, CarConsumer c)
■ 필요한 인터페이스
1) CarConsumer.java
1
2
3
4
5
|
//필요한 함수형 인터페이스 1
public interface CarConsumer { //받기만하고 리턴하지 않음
void apply(Car car);
}
|
cs |
2) CarPredicate.java
1
2
3
4
5
|
//필요한 함수형 인터페이스 2
public interface CarPredicate { //인자 값을 받아서 True/Flase 리턴
boolean test(Car car);
}
|
cs |
2. Car.java
Car.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package hw;
import java.util.Arrays;
import java.util.List;
public class Car {
//멤버변수
private String model;
private boolean gasoline;
private int age;
private int mileage;
//생성자
public Car(String model, boolean gasoline, int age, int mileage) {
this.model = model;
this.gasoline = gasoline;
this.age = age;
this.mileage = mileage;
}
//메소드
public String getModel() {
return model;
}
public boolean isGasoline() {
return gasoline;
}
public int getAge() {
return age;
}
public int getMileage() {
return mileage;
}
public String toString() {
return String.format("Car(%s, %s, %d, %d)", model, gasoline, age, mileage);
}
//Car 목록
public static final List<Car> cars = Arrays.asList(
new Car("소나타", true, 18, 210000),
new Car("코란도", false, 15, 200000),
new Car("그랜저", true, 12, 150000),
new Car("산타페", false, 10, 220000),
new Car("아반떼", true, 10, 70000),
new Car("에쿠스", true, 6, 100000),
new Car("그랜저", true, 5, 80000),
new Car("소나타", true, 2, 35000),
new Car("쏘렌토", false, 1, 10000),
new Car("아반떼", true, 1, 7000));
}
|
cs |
3. CarDemo.java
CarDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package hw;
import java.util.ArrayList;
import java.util.List;
public class CarDemo {
public static List<Car> findCars(List<Car> all, CarPredicate cp) {
List<Car> result = new ArrayList();
for (Car car : all) {
if (cp.test(car)) { //test 메서드의 내용은 아래 람다식으로 정의
result.add(car);
}
}
return result;
}
public static void printCars(List<Car> all, CarConsumer cc) {
for (Car car : all) {
cc.apply(car);
}
}
public static void main(String[] args) {
//디젤자동차 찾기
List<Car> dieselCars = findCars(Car.cars, c -> !c.isGasoline());
System.out.println("디젤 자동차 = " + dieselCars);
//10년보다 오래된 자동차만 모두 찾기
List<Car> oldCars = findCars(Car.cars, c -> c.getAge() > 10);
System.out.println("오래된 자동차 = " + oldCars);
//10년보다 오래된 디젤 자동차만 모두 찾기
List<Car> oldDieselCars = findCars(Car.cars, c -> c.getAge() > 10 && !c.isGasoline());
System.out.println("오래된 디젤 자동차 = " + oldDieselCars);
//디젤 자동차를 출력하되 모델과 연식만 나타나도록 출력
System.out.print("디젤 자동차 = ");
printCars(dieselCars, c -> System.out.printf("%s(%d) ", c.getModel(), c.getAge()));
//10년보다 오래된 자동차를 출력하되 모델, 연식, 주행거리만 출력
System.out.print("\n오래된 자동차 = ");
printCars(oldCars, c -> System.out.printf("%s(%d, %d) ", c.getModel(), c.getAge(), c.getMileage()));
}
}
|
cs |
4. 실행결과
함께 보면 좋은 글
'Language > JAVA' 카테고리의 다른 글
[JAVA] 스트림(Stream) 연산 옵션 타입 | Yoon's Dev (0) | 2021.05.20 |
---|---|
[JAVA] 스트림(Stream) 연산 느긋한 연산, 조급한 연산, 병렬 처리 | Yoon's Dev (0) | 2021.05.18 |
[JAVA] 문자(Text) 스트림, 버퍼(Buffer) 스트림, File 클래스 | Yoon's Dev (0) | 2021.04.26 |
[JAVA] JAVA의 입출력, 바이트 스트림(ByteStream) | Yoon's Dev (0) | 2021.04.24 |
[JAVA] JAVA의 입출력 스트림(Stream) | Yoon's Dev (0) | 2021.04.23 |