ランダの様々な表現


Ramdaとの関数インタフェース

  • 関数インタフェース?

  • 「抽象メソッドが一体となったインタフェース」.
  • ランダ?

  • は、主に「インスタンス」ロールではなく、機能(メソッド)を実行するために使用されます.
  • 状況。

    import java.util.ArrayList;
    import java.util.Collections;
    
    class SLenComp implements Comparable<String> {
        @Override
        public int compare(String s1, String s2) {
            return s1.length() - s2.length();
        }
    }
    
    class SLenComparator {
        public static void main(String[] args) {
            List<String> list = new ArrayList<>();
            list.add("Robot");
            list.add("Lambda");
            list.add("Box");
    
            Collections.sort(list, new SLenComp());
            /** 오른쪽 매개변수인 new SLenComp()에는 기능(메소드) 하나만이 들어간다. **/
            
            for(String s : list)
                System.out.println(s);
    
        }
    }
  • 注釈に記載されているように、sortメソッドの右側には、何に基づいているかを決定する機能(メソッド)が1つしか含まれていない.
  • ランダはこの点で良い役を演じた.
  • ランダの様々な表現


    1.パラメータがあり、返さないram式

    Printable p;
    
    p = (String s) -> {System.out.println(s); }; // 줄이지 않고 쓴 표현
    p = (String s) -> System.out.println(s); // 중괄호를 생략한 표현
    p = (s) -> System.out.println(s); // 매개변수 타입 생략
    p = s -> System.out.println(s); // 매개변수 소괄호 생략
  • 機能を実行するコードが2行より多い場合は、->カッコを使用します.
  • パラメータが2つより大きい場合は、->かっこを使用します.
  • 2つのパラメータがあれば?

    interface Calculate{
        void cal(int a, int b);
    }
    
    public static void main(String[] args) {
        Calculate c;
        c = (a, b) -> {System.out.println( a + b );}; // 람다식으로 덧셈 기능 지정
        c.cal(4, 3);
        c = (a, b) -> {System.out.println( a - b );}; // 람다식으로 뺄셈 기능 지정
        c.cal(4, 3);
    }

    2.パラメータ付きで返されるram多項式

    interface Calculate{
        int cal(int a, int b); // 인터페이스에 값을 반환하는 추상 메소드가 있다.
    }
    
      public static void main(String[] args) {
        Calculate c;
        c = (a, b) -> { return a + b; }; // return 문이 있을 경우 -> 중괄호 필요
        System.out.println(c.cal(a, b));
        
        c = (a, b) -> a + b; // 연산 값만 남을 경우 -> return 필요X, 중괄호 안 써도 된다.
        System.out.println(c.cal(a, b));
      }

    パラメータ付きで返されるramdasize 2

    interface HowLong{
        int len(String s);
    }
    
      public static void main(String[] args) {
        HowLong h1 = s -> s.length();
        System.out.println(h1.len("I am so happy"));
      }
  • 回文(最初のランダ式)->中かっこがある場合.
  • 演算結果が
  • の場合、(2番目のラムダ式)->returnを使用せずに自分で戻ります.
    したがって、カッコは使いません.
  • 3.パラメータのないRam多項式

    import java.util.Random;
    
    interface Generate {
      int rand();
    }
    
      public static void main(String[] args) {
        Generate gen = () -> {
            Random rand = new Random();
            return rand.nextInt(50);
        };
        
        System.out.println(gen.rand());
      }
    パラメータがないことを
  • ()で通知します.
  • 4.ランダ食品とジェニーリック

    @FunctionalInterface
    interface Calculate <T>{
        T cal(T a, T b);
    }
    
      public static void main(String[] args) {
        // Culculate<Integer>로 인터페이스의 T를 Integer로 결정했다.
        Calculate<Integer> ci = (a, b) -> a + b; 
        System.out.println(ci.cal(4, 3));
      }
    [ソース]
  • 尹聖祐熱血Java講の