lambda 2

2023. 7. 6. 12:33ㆍjava

μ—¬λŸ¬κ°€μ§€ ν˜•μ‹μœΌλ‘œ interface κ΅¬ν˜„ν•˜μ—¬ λžŒλ‹€ μ‚¬μš© 예제

 

1. λ§€κ°œλ³€μˆ˜ μ—†λŠ” 경우

λ§€κ°œλ³€μˆ˜ μžλ¦¬λŠ” ()둜 λͺ…μ‹œ, μ‹€ν–‰ μ½”λ“œ 1쀄인 경우 μ€‘κ΄„ν˜Έ μƒλž΅ κ°€λŠ₯

 

2.λ§€κ°œλ³€μˆ˜ 1개인 경우

λ§€κ°œλ³€μˆ˜ 자리 () μƒλž΅ κ°€λŠ₯

 

3.λ§€κ°œλ³€μˆ˜ 2개인 경우

λ§€κ°œλ³€μˆ˜ () λͺ…μ‹œν•˜κ³  ,둜 λ§€κ°œλ³€μˆ˜ λ‚˜μ—΄

 

4.return κ°’ μžˆλŠ” κ²½μš°μ½”λ“œμ— return λͺ…μ‹œν–ˆλ‹€λ©΄, μ‹€ν–‰ μ½”λ“œ 1쀄인 κ²½μš°λΌλ„ {} μƒλž΅ Xreturn μƒλž΅μ€ μ‹€ν–‰ κ²°κ³Ό 값이 남아 μžˆλŠ” κ²½μš°μ— κ°€λŠ₯ex) 4번 예제 trueλΌλŠ” 결과값이 λ‚¨μŒ

 

package test1;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

//Functional Interface
@FunctionalInterface //개발자 μ‹€μˆ˜ λ°©μ§€ μ–΄λ…Έν…Œμ΄μ…˜
interface Inter1{
    void test();
}

interface Inter2{
    void test(int num); //num 3 -> 짝수, ν™€μˆ˜λ₯Ό 좜λ ₯
}

interface  Inter3{
    void test(String str, int num);
}

interface Inter4{
    boolean test(int num);
}

public class Lambda2 {

    public static void main(String[] args) {

        List<Integer> list =  new ArrayList<>();

        list.add(10); list.add(20); list.add(30);
        list.add(40); list.add(50); list.add(60);

        //Consumer<T> void accept(T t) - acceptλΌλŠ” λ©”μ†Œλ“œ
        //Consumer<? extends T> void accept(T t) μœ„ μ•„λž˜ κ°™μŒ

        Consumer<Integer> c = num -> System.out.println(num);
        list.forEach(c); //λ¦¬μŠ€νŠΈμ— μžˆλŠ” μš”μ†Œμ— ν•˜λ‚˜ν•˜λ‚˜ μ ‘κ·Όν•΄μ„œ System.out.println(num)
        //μœ„ μ•„λž˜ 동일
        list.forEach(c = num -> System.out.println(num));

        String s = "aaa";
        Integer.parseInt(s);

        Integer.parseInt(s = "aaa");



        //1 λ§€κ°œλ³€μˆ˜ X > λ§€κ°œλ³€μˆ˜ 자리만 μ†Œκ΄„ν˜Έλ‘œ λͺ…μ‹œ
        Inter1 i1 = () -> System.out.println("hello");
        i1.test();


        //2 λ§€κ°œλ³€μˆ˜ 1 > λ§€κ°œλ³€μˆ˜ μ†Œκ΄„ν˜Έ μƒλž΅ κ°€λŠ₯
        Inter2 i2 = num -> {
            if(num % 2 == 0) {
                System.out.println("짝수");
            }
            else{
                System.out.println("ν™€μˆ˜");
            }
        };
        i2.test(10);

        //3 num만큼 str 좜λ ₯
        Inter3 i3 = (str, num) -> {
            for(int i = 0; i < num ; i++){
                System.out.print(str);
            }
        };
        i3.test("java", 2);

        //4 짝수면 true, ν™€μˆ˜λ©΄ false
        Inter4 i4 = num -> {
            //return이 있으면 μ½”λ“œ 1쀄이어도 {} μƒλž΅ x
            return num % 2 == 0 ? true : false;
        };
        i4.test(10);

        //4 짝수면 true, ν™€μˆ˜λ©΄ false
        Inter4 i5 = num ->
            //return ν‚€μ›Œλ“œκ°€ 없어도 μ½”λ“œ 이해 κ°€λŠ₯ν•˜λ©΄ return ν‚€μ›Œλ“œ μ§€μš°κ³  {} μƒλž΅ κ°€λŠ₯
            //μ‹€ν–‰ κ²°κ³Ό 값이 남아 μžˆλ‹€λ©΄ return μƒλž΅ κ°€λŠ₯ > true λΌλŠ” 값이 λ‚¨μŒ
            num % 2 == 0 ? true : false;

        i5.test(10);
    }
}

 

μ œλ„€λ¦­ / λžŒλ‹€ μ‘μš© 1

package test1;

                //μžλ£Œν˜• μ•ˆ μ •ν•˜κ³  T둜 쀌
interface Calculate<T>{
    //좔상 λ©”μ†Œλ“œ
    T cal(T num1, T num2);

}

public class Lambda3 {
    public static void main(String[] args) {
        //μ œλ„€λ¦­ μ‚¬μš© μ‹œ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ ν•  λ•Œ μžλ£Œν˜• 정해짐
        Calculate<Integer> c1 = (num1, num2) -> num1 + num2; // 두 λ§€κ°œλ³€μˆ˜μ˜ ν•©
        Calculate<Double> c2 = (num1, num2) -> num1 / num2; // 두 λ§€κ°œλ³€μˆ˜μ˜ λͺ«

        System.out.println(c1.cal(10, 20));
        System.out.println(c2.cal(15.0,2.0));
    }


}

 

μ‘μš© 2

package test1;

//Predict<T> boolean test(T t)

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class Lambda4 {
    public static void main(String[] args) {

        List<Integer> list =  new ArrayList<>();

        list.add(10); list.add(20); list.add(30);
        list.add(40); list.add(50); list.add(60);

        Predicate<Integer> p = n -> n % 2 == 0; //testλΌλŠ” λ©”μ„œλ“œμ˜ λ‚΄μš©μœΌλ‘œ 듀어감
        sum(list, p);
        //μœ„μ˜ 두쀄 μ•„λž˜ ν•œμ€„κ³Ό 동일
        //λ©”μ†Œλ“œλŠ” ν•˜λ‚˜μ§€λ§Œ λ”ν•˜λŠ” 과정을 λ°”κΏ€ 수 있음
        sum(list, n -> n % 2 == 0); //짝수의 ν•©λ§Œ
        sum(list, n -> n % 2 != 0); //ν™€μˆ˜μ˜ ν•©λ§Œ


    }
    //λ©”μ†Œλ“œ μ°Έμ‘°, μ˜΅μ…”λ„, 슀트림 μ‚¬μš© μ€‘μš”!!
    //public static <T, R> R sum(List<T> list, Predicate<Integer> p) { 처럼 ν™•μž₯ κ°€λŠ₯
    public static int sum(List<Integer> list, Predicate<Integer> p) {
        //νŠΉμ • 쑰건에 λ§žλŠ” 리슀트 μš”μ†Œμ˜ 합을 리턴
        int sum = 0;

        for(int num : list){
            if(p.test(num)){
               sum += num;
            }
        }
        return sum;
    }
}

** μΆ”κ°€

λžŒλ‹€ λ©”μ†Œλ“œ μ—¬λŸ¬κ°œλ©΄ λͺ» μ“°λŠ”λ° ? >  κ΅¬ν˜„ν•  λ©”μ„œλ“œ μ—¬λŸ¬κ°œ λœΈμ— λŒ€ν•œ μ„€λͺ…

μ•„λž˜ 3κ°œλŠ” 이미 κ΅¬ν˜„λœ λ©”μ†Œλ“œμ΄κ³ 

test만 좔상 λ©”μ†Œλ“œ

μ•žμ— μ•„μ΄μ½˜μ΄ λ‹€λ₯΄κ³  마우슀 올렀보면 좔상 λ©”μ†Œλ“œ / λ©”μ†Œλ“œ λ”°λ‘œ λ‚˜μ˜€λŠ” 것을 확인 κ°€λŠ₯!

'java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

lambda  (0) 2023.07.06
Map  (0) 2023.03.31
숫자 야ꡬ κ²Œμž„  (0) 2023.02.09
β˜…β˜…β˜…μ»¬λ ‰μ…˜ν”„λ ˆμž„μ›Œν¬2  (0) 2023.02.07
μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬ 문제 ν’€κΈ°  (0) 2023.02.03