본문 바로가기
CS/JAVA

[JAVA] Functional Interface, Stream, String, StringBuffer

by 두둠칫 2021. 1. 14.

1. Functional Interface(함수적 인터페이스)

1) 개요

- java.util.function

- JDK 1.8부터 지원

- 모두 인터페이스이므로 람다식 이용

 

2) 종류

종류 params / return 비고
consumer O / X  
supplier X / O  
function O / O data type을 바꾸어 return하는데 사용
operator 연산해서 값을 return하는데 사용
predicate boolean return value
// Function<T,R> // T : param type, R : return type
Function<String,Integer> f = t->t.length();

// Operator<T> // T : params & return type
Operator<Integer> o = (t,u) -> t+u;

// Predicate<T> // T : param type
Predicate<String> p = t->t.length() == 5;

 

 

2. Stream

1) Java I/O : InputStream/OutputStream

 

2) Stream API

- JDK 1.8 이상 지원

- Collection에 저장된 data를 중간처리 및 최종처리가 가능하다.

- 중간처리 : 최종처리 = map : reduce

 

3) Stream type 얻기

- Collection, 배열, file로 가능

- 예시

String [] names = ...;

// 외부반복자
for(str : names){
	sysout(str);
}

// 내부반복자
Stream<String> s = Arrays.stream(names);
stream.forEach(s->sysout(s));

// 중복제거 및 List 반환
List<String> l = stream.distinct().collect(Collectors.toList());

이 외에도 filter, limit, skip, sorted method가 있다.

 

cf) 내부반복자가 외부반복자보다 성능이 더 좋다. why?

 

4) Optional Class

???

 

 

3. String, StringBuffer

 

// 값으로 생성
String s1 = "hi"; // 재사용

// 인스턴스 생성
String s2 = new String("hi"); // heap에 매번 생성

String s3 = "hi";
String s4 = new String("hi);


/*
* s1 == s2 : F
* s1 == s3 : T : s1과 s3는 같은 메모리를 가리킴
* s2 == s4 : F : s2와 s4는 값만 같은 서로 다른 인스턴스를 가리킴
*/

cf) String은 참조값이므로 비교할 떄는 equals()를 사용

 

String의 가장 큰 특징은 변경이 불가능한 것이다. 따라서 매번 새로운 인스턴스를 생성한다. 즉 메모리 관리가 비효율적

하지만, StringBuffer/StringBuilder는 변경가능하다. 즉 메모리 관리가 효율적

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

[JAVA] JAVA I/O, 객체의 직렬화  (0) 2021.01.18
[JAVA] Exception  (0) 2021.01.18
[JAVA] Collection API  (0) 2021.01.14
[JAVA] Anonymous class, Lambda Expression, Generics  (0) 2021.01.14
[JAVA] Abstract, Interface  (0) 2021.01.12