identity function은 같은 타입의 값 그대로를 리턴하는 메소드이다.


public String f (String value) {

return "value is" + value;

}


의 방식이 아닌 말 그대로 받은 값 그대로 리턴을 해야한다.


public String f (String value) {

return value;

}


그럼 이 방식을 왜 사용하는가?


identity 방식을 사용하면 (return t->t;)

널 포인터에 관한 처리를 해줄 수 있기 때문


ps

Function 인터페이스의 identity()를 사용해도 된다.(자동으로 타입을 추론한다)


ex) 리스트의 숫자에 2를 곱한 값과 그렇지 않은 값을 출력하기


public class Ex1 {

public static void main(String[] args) {

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);


System.out.println("map (number, null)" + map(numbers, i->i*2));

System.out.println("map (number, null)" + map(numbers, null));

}


private static <T, R> List<R> map(List<T> list, Function<T, R> mapper) {

final Function<T, R> function;

if (mapper != null) {

function = mapper;

} else {

function = t -> (R) t;

}

final List<R> result = new ArrayList();

for(final T t: list){

result.add(function.apply(t));

}


return result;


}

}

방식에서 보듯이 null에 관한 처리를 해주고 있지만 identity function을 이용해 처리한다면


public class Ex2 {

public static void main(String[] args) {

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);


System.out.println("map (number, null)" + map(numbers, i->i*2));

System.out.println("map (number, null)" + map(numbers, i->i));

}


private static <T, R> List<R> map(List<T> list, Function<T, R> mapper) {

final List<R> result = new ArrayList();

for(final T t: list){

result.add(mapper.apply(t));

}


return result;


}

}


로 처리가 가능하다.


'Programing > JAVA' 카테고리의 다른 글

JAVA 1.8 정리 (2)  (0) 2016.02.13
JAVA 1.8 정리 (1)  (0) 2016.02.12
JAVA static 선언 try catch  (0) 2016.01.12
Netty 인코더 디코더의 아주 간단한 개념  (0) 2016.01.11
Netty  (0) 2016.01.11
This Keyword  (0) 2015.02.10
Posted by thread1525

댓글을 달아 주세요

java 8의 funtional programming을 통한 기술,


final List<Integer> number = Array.asList(1, 2, 3);

final String result = number.stream().map(String::valueOf).collect(joining(" , ");


의 경우

integer 였던 number의 리스트가 stream()의 map을 이용해 String value로 바뀌어 저장되고 collect joining 을 통해 ,가 붙여 지는 결과가 만들어진다.


즉 System.out.println(result)의 결과는

1, 2, 3이 된다.


public classExample {

public static void main (String[] args)

{

List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9);

String result = numbers.stream().map(String::valueOf).collect(Collectors.joining(" , "));

//Collectors를 추가하니 에러 없이 모두 정상 처리 되었다.

System.out.println(result);

}

}



'Programing > JAVA' 카테고리의 다른 글

JAVA 1.8 정리 (2)  (0) 2016.02.13
JAVA 1.8 정리 (1)  (0) 2016.02.12
JAVA static 선언 try catch  (0) 2016.01.12
Netty 인코더 디코더의 아주 간단한 개념  (0) 2016.01.11
Netty  (0) 2016.01.11
This Keyword  (0) 2015.02.10
Posted by thread1525

댓글을 달아 주세요

JAVA 개발 시 static으로 선언하고 싶은 메소드에 try catch 구문으로 감싸야 되는 경우 

static {

method();

}


방식으로 작성하면 static 안에서 try catch 구문을 작성 할 수 있다.

'Programing > JAVA' 카테고리의 다른 글

JAVA 1.8 정리 (2)  (0) 2016.02.13
JAVA 1.8 정리 (1)  (0) 2016.02.12
JAVA static 선언 try catch  (0) 2016.01.12
Netty 인코더 디코더의 아주 간단한 개념  (0) 2016.01.11
Netty  (0) 2016.01.11
This Keyword  (0) 2015.02.10
Posted by thread1525

댓글을 달아 주세요


블로그 이미지
1525번 thread 입니다.
thread1525

공지사항

Yesterday9
Today2
Total6,172

달력

 « |  » 2019.10
    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    

최근에 달린 댓글

최근에 받은 트랙백

글 보관함