- 스트림 어렵다. 써보고싶다~
- 스트림 사용 이유 :
1. 간결하고 선언적인 코드
2. 병렬 처리 지원 --> 멀티코어 프로세서로 성능 향상
3. 풍부한 연산 지원 --> 복잡한 데이터 간결히 표현
4. 지연 평가 --> 최종 연산이 호출되기 전까지는 중간 연산이 실제로 수행되지 않음.
5. 가독성
6. 일관된 API
[Java]
StringBuilder sb = new StringBuilder();
for (String str : arr) {
sb.append(str);
}
answer = sb.toString();
- 메모리 할당을 최소화하여 성능이 좋지만 장황함.
- 문자열 결합이 매우 빈번하게 일어나는 경우 유용
return String.join("", arr);
- 코드가 매우 간결하고 읽기 쉽습니다.
- 성능이 좋습니다.
- Java 8 이상에서만 사용 가능합니다.
return new String(String.join("",arr));
- 불필요한 String 객체를 생성하므로 메모리 낭비가 발생합니다.
- String.join()으로 이미 문자열을 생성하기 때문에 중복된 작업입니다.
return Arrays.stream(arr).collect(Collectors.joining());
Arrays.stream()
- 배열을 입력으로 받음
- 범위 (범위 시작과 끝 인덱스)를 지정하여 배열의 일부만 스트림으로 변환할 수 있음
- 기본형 배열 (int[], long[], double[])에 대해 특화된 메서드를 제공
return Stream.of(arr).collect(Collectors.joining());
Stream.of()
- 가변 인자 (varargs)를 사용하여 여러 개의 개별 객체나 배열을 입력으로 받을 수 있음
- 배열 전체를 스트림으로 변환
- 객체 배열만 지원
// Arrays.stream() 예제
int[] intArray = {1, 2, 3, 4, 5};
IntStream intStream = Arrays.stream(intArray); // 기본형 배열 지원
IntStream intStreamRange = Arrays.stream(intArray, 1, 4); // 부분 배열 스트림 생성
// Stream.of() 예제
Stream<String> stringStream = Stream.of("a", "b", "c"); // 개별 객체를 스트림으로
String[] stringArray = {"a", "b", "c"};
Stream<String> stringStreamFromArray = Stream.of(stringArray); // 배열을 스트림으로
배열의 일부만 스트림으로 변환하거나 기본형 배열을 스트림으로 변환할 때는 Arrays.stream()을 사용하고,
여러 개의 개별 객체나 객체 배열을 스트림으로 변환할 때는 Stream.of()를 사용할 수 있습니다.
[Python]
# java -- String.join("", arr);
answer = "".join(arr)
[C]
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// arr_len은 배열 arr의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* arr[], size_t arr_len) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
char* answer = (char*)malloc(arr_len);
int i=0;
for(i=0;i<arr_len;i++)
{
//printf("%d\n",*arr[i]);
answer[i]=*arr[i];
printf("%c\n",answer[i]);
}
answer[i]=0;
// 메모리 해제
free(answer);
return 0;
}