어떤 function 이 A를 받고 그대로 다시 A를 출력한다면 이 함수는 Identity 함수이다.

Function Map 은 다른 타입을 리턴할 수 도있고, 같은 타입이지만 가공된 데이터를 리턴할 수도 있고, 아니면 들어온값 그대로 리턴하는 Identity 펑션이 될 수도 있다.

'IT > 자바8-람다' 카테고리의 다른 글

람다 원리 및 값 캡쳐란?  (0) 2020.05.07
클로져(Closure, Close-over), 쉐도잉  (0) 2020.05.06
자주쓰는 람다  (0) 2020.04.29
람다 사용법 및 규칙  (0) 2020.04.23
First Class Citizen이란?  (0) 2020.04.23

자동완성 등록법

자동완성에 등록하는 법

 

 

스태틱 함수들의 클래스를 모아서 애스터리스크(*)로 처리하는 법 (기본값99)

기본 단축키

기본 단축키
sysout 같은 단축키 등록

 

 

이렇게 등록하면 글자 칠때마다 계속 자동완성 뜸(타자 느린사람 추천)

 

'IT > 자바8-스트림' 카테고리의 다른 글

자주쓰는 스트림 함수  (0) 2020.04.29

스트림 함수는 중간연산(체이닝 가능)과 결과연산이 있다.

 

중간연산

filter

  • predicate

map

  • function

distinct

  • 메쏘드 파라미터 없음
  • 스트림에서 중복 제거시킴

최종연산

collect

sum

  • 인티저인 경우에만

foreach

count

reduce 

  • Element를 하나하나 줄여나가서 하나만 남겨버림
  • 파라미터는 (초기값, 함수((i1, i2) -> retun))
    • 파라미터(초기값, (이전값, 스트림에서 받은 값) -> 연산해서 리턴)
    • 초기값은 이전값이 없는경우인 최초 1회만 사용
    • Ex)
      • Students.stream().map(student -> stduent.getEnglishScore()).reduce(0, (score1, score2) -> score1 + score2));
  • Integer가 아닌 타입의 리스트에서 멤버변수들의 합을 구할 때

 

파라미터가 2개인 경우 Arity가 2라고 하며, Arity가 2인경우 Binary 혹은 2-ary라고함

스트림에서 파라미터로 받는 자주쓰는 람다

Function<T, R>

  • R apply(T t);
  • 연산을 통해 T타입이 R타입으로 변한
  • 스트림 Map

 

Predicate<T>

  • boolean test(T t);
  • 연산을 통해 boolean을 리턴

 

Consumer<T>

  • void accept(T t);
  • 연산만 함

 

Supplier<T>

  • T get();
  • 인자없이 리턴만함.
  • 레이지 로딩 같은 경우에 사용

'IT > 자바8-람다' 카테고리의 다른 글

람다 원리 및 값 캡쳐란?  (0) 2020.05.07
클로져(Closure, Close-over), 쉐도잉  (0) 2020.05.06
Identity 함수?  (0) 2020.04.29
람다 사용법 및 규칙  (0) 2020.04.23
First Class Citizen이란?  (0) 2020.04.23

정렬?

리스트 같은 자료구조 객체에서 정렬되어 있는 순서를 바꿀때 사용.

원시타입(primitive, 기본형)을 일반적으로 사람들에 통용되는 기준이 있다. 가령 2는 1보다 크다 등등

사용자가 정의한 클래스의 객체의 정렬은 뭐를 기준점으로 둘것인가? 는 개발자가 정의해줘야만 한다.(예를들어 필드가 생년월일과 이름을 가진 객체들이 있다면, 이 객체의 정렬기준은 생년월일이 빠른사람으로 기준으로 하겠다 라고)

 

자바에서 제공하는 정렬 관련 인터페이스는 Comparable, Comparator.

결론부터 말하자면, Comparable은 클래스 자체의 코드를 수정 가능할 때 사용하면 되고, Comparator은 클래스의 수정이 불가능할때(라이브러리 라덩가) 사용하면 된다. 말그대로 comperator는 정렬기 같은 느낌으로 이해하자.

  • Comparable
      • 클래스에서 comparable을 implements하고, compareTo 메소드를 오버라이딩 하면 됨
    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
    public class ComparableStudy {
        public static void main(String[] args) {
            List<Person> people = new ArrayList<>();
            people.add(new Person(900101"김구라"));
            people.add(new Person(951231"최팩트"));
            
            //정렬 전에는 김구라, 최팩트 순으로 되어있고,
            Collections.sort(people);
            //정렬 후에는  최팩트, 김구라 순으로 되어있음.
        }
    }
     
    class Person implements Comparable<Person> {
        //셋터, 겟터가 들어가면 코드가 길어지니 public으로 함.
        public int idNumber;
        public String name;
                
        public Person(int idNumber, String name) {
            super();
            this.idNumber = idNumber;
            this.name = name;
        }
        
        @Override
        public int compareTo(Person o) {
            if(this.idNumber > o.idNumber){
                return -1;
            }
            return 0;
        }
    }
    cs

     

  • Comparator
      • Comparator 인터페이스를 compare메쏘드를 오버라이딩하여 객체로 생성해서 사용.
    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
    public class ComparatorStudy {
     
        public static void main(String[] args) {
            List<Student> students = new ArrayList<>();
            students.add(new Student(900101"김구라"));
            students.add(new Student(951231"최팩트"));
            
            Comparator<Student> studentComparator = new Comparator<Student>() {
                @Override
                public int compare(Student o1, Student o2) {
                    if(o1.idNumber > o2.idNumber){
                        return -1;
                    }
                    return 0;
                }
            };
     
            //정렬 전에는 김구라, 최팩트 순으로 되어있고,
            Collections.sort(students,studentComparator);    
            //정렬 후에는  최팩트, 김구라 순으로 되어있음.
        }    
    }
     
    class Student  {
        //셋터, 겟터가 들어가면 코드가 길어지니 public으로 함.
        public int idNumber;
        public String name;
                
        public Student(int idNumber, String name) {
            super();
            this.idNumber = idNumber;
            this.name = name;
        }
    }
    cs

 

  • CompareTo, Compare 메쏘드의 규칙 : '리턴되는 int값이 음수이면 현재 인스턴스가 비교대상인 인스턴스보다 작고, 양수이면 크고, 0 이면 같도록 하자'

 

더 정리하거나 알아야 할것 : 

성능, 양수 음수 리턴이 의미하는 것

 

참조사이트 : 

https://www.daleseo.com/java-comparable-comparator/

https://jeong-pro.tistory.com/173

https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html

 

 

'IT > 자바' 카테고리의 다른 글

자료구조 정리 잘된 곳  (0) 2020.05.13
해쉬코드, 이퀄스  (0) 2020.05.08
해쉬맵  (0) 2020.05.08
자바 디컴파일  (0) 2020.05.07
Volatile 이란?  (0) 2020.05.07

아래 코드만 알면 될듯.!

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
public class LamdaStudy {
    public static void main(String args[]) {
        // 함수형 인터페이스에 선언된 메쏘드의 파라미터 갯수만 맞추면 된다.(파라미터 이름까지 맞출 필요 없다.)
        // 오직 return 의 연산만 사용되면 대괄호{}의 사용 없이 retrun 문자도 생략 가능하다.
        LamdaInterface lamdaInterface = (a, b) -> a + b;
        callTest(lamdaInterface);
        
        // 대괄호 사용시에는 추가 행위를 넣을 수 있으며, return 문자 필수.
        callTest((c, d) -> {
            System.out.println("첫번째 인자 : " + c);
            System.out.println("두번째 인자 : " + d);
            return c + d;
        });        
    }
 
    public static void callTest(LamdaInterface lamdaInterface) {
        System.out.println(lamdaInterface.LamdaInterfaceMethod(5090));
    }
}
 
@FunctionalInterface
interface LamdaInterface {
    int LamdaInterfaceMethod(int num1, int num2);
 
    // 1. 어노테이션 달자.
    // 2. 함수형 인터페이스에서는 무조건 메쏘드는 1개만 선언해야 함.
    // 2-1. 메쏘드의 파라미터 이름은 사실상 상관없다.
}
cs

부연설명 : 6라인과 9라인을 보자. 6라인에서는 함수형 변수인자를 파라미터로 넘겼고, 9라인은 람다표현식으로 구현하며 넘김. 

왜 이걸 알아야 하냐? 스트림의 메쏘드의 인자들이 다 함수형 인터페이스고, 위와 같은 람다표현식으로 필요할때 그때그때 선언하며 써먹기(선언형 프로그래밍) 때문임.

  • 꼭 알아야 할것
    • 정확히 말하면 인터페이스에서 선언되는 메쏘드는 absract를 써주지 않아도 자동으로 abstract인것이다. 함수형 인터페이스에서는 abstract 메쏘드가 딱 1개여야 한다. 그외 static 이나 default 메쏘드도 같이 존재할 수 있다. (자바 Function 인터페이스 코드 참조해보면 됨.)

끝.

'IT > 자바8-람다' 카테고리의 다른 글

람다 원리 및 값 캡쳐란?  (0) 2020.05.07
클로져(Closure, Close-over), 쉐도잉  (0) 2020.05.06
Identity 함수?  (0) 2020.04.29
자주쓰는 람다  (0) 2020.04.29
First Class Citizen이란?  (0) 2020.04.23

First Class Citizen이란 아래 3개를 만족하면 됨.

1. Element가 Function의 파라미터로 넘길수 있어야 함.

2. Element가 Function의 결과값으로 반환이 될 수 있어야 함.

3. Data Structure에 저장이 될 수 있어야 함.(변수에 Assign할 수 있어야 함)

(자바에서 Function에 해당하는 것은 메쏘드임.)

기존 자바에서는 이를 만족하는 것이 변수뿐이었으므로, Function은 First Class Citizen을 만족하지 못함.

Java8에서 Function도 위 3개 항목을 만족하여 First Class Function 지원언어로 거듭남. (함수형 프로그래밍, 람다 표현식 을 사용) 

 

긴 한줄 요약:

Java8에서부터 Function도 First Class Citizen이 되었고(원래는 Variable만 이었음.), 함수형 프로그래밍이 가능하다.

(Funcion becomes 'First Class Citizen' from java8, so developer can do funtionall program)

'IT > 자바8-람다' 카테고리의 다른 글

람다 원리 및 값 캡쳐란?  (0) 2020.05.07
클로져(Closure, Close-over), 쉐도잉  (0) 2020.05.06
Identity 함수?  (0) 2020.04.29
자주쓰는 람다  (0) 2020.04.29
람다 사용법 및 규칙  (0) 2020.04.23

https://colorscripter.com/


코드 넣어보기 테스트


1
2
3
4
5
6
7
8
9
10
11
12
13
    @Override
    protected String getOperationMessage() {
        return Messages.InspectionAction_1;
    }
 
    @Override
    protected boolean updateSelection(IStructuredSelection selection) {
        return !(selection.isEmpty() ||
                대충해보자
    }
cs


잘 들어갔을까요?

+ Recent posts