Language/JAVA

[JAVA] JAVA 람다식을 활용한 예제 (1) | Yoon's Dev

Yooniron 2021. 5. 8. 21:28

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("소나타"true18210000),
            new Car("코란도"false15200000),
            new Car("그랜저"true12150000),
            new Car("산타페"false10220000),
            new Car("아반떼"true1070000),
            new Car("에쿠스"true6100000),
            new Car("그랜저"true580000),
            new Car("소나타"true235000),
            new Car("쏘렌토"false110000),
            new Car("아반떼"true17000));
}
 
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. 실행결과

 

 

 

 함께 보면 좋은 글

 

 

[JAVA] JAVA의 람다식 사용법 및 다양한 작성 예제 | Yoon's Dev

JAVA의 람다식(lambda) 사용법 및 다양한 작성 예제 Java의 람다식 ■ 자바의 람다식 ✓ 람다식(lambda) - 자바에서는 함수를 메서드라고 부르고 메서드의 형태로 존재 - 자바 람다식의 구조  . (argument)

yooniron.tistory.com