- 스트림 생성
stream()
메서드를 사용하여 배열로부터 스트림을 생성할 수 있습니다:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class StreamCreationExample {
public static void main(String[] args) {
// 1. 문자열 배열로부터 스트림 생성
String[] fruits = {"Apple", "Banana", "Cherry", "Date", "Elderberry"};
Stream<String> fruitStream = Arrays.stream(fruits);
fruitStream.forEach(System.out::println);
// 2. 정수 배열로부터 스트림 생성
int[] numbers = {1, 2, 3, 4, 5};
IntStream numberStream = Arrays.stream(numbers);
System.out.println("합계: " + numberStream.sum());
// 3. 2차원 배열로부터 스트림 생성
int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Stream<int[]> rowStream = Arrays.stream(matrix);
rowStream.forEach(row -> System.out.println(Arrays.toString(row)));
// 4. 부분 배열로부터 스트림 생성
String[] partialFruits = Arrays.copyOfRange(fruits, 1, 4);
Stream<String> partialStream = Arrays.stream(partialFruits);
System.out.println("부분 배열의 길이: " + partialStream.count());
// 5. 스트림을 사용한 데이터 처리
int[] scores = {85, 92, 78, 95, 88};
double average = Arrays.stream(scores)
.average()
.orElse(Double.NaN);
System.out.println("평균 점수: " + average);
// 6. 스트림을 사용한 필터링과 정렬
String[] words = {"hello", "world", "java", "programming", "example"};
List<String> sortedWords = Arrays.stream(words)
.filter(word -> word.length() > 5)
.sorted()
.collect(Collectors.toList());
System.out.println("길이가 5 이상인 단어들: " + sortedWords);
// 7. 스트림을 사용한 중복 제거
int[] numbersWithDuplicates = {1, 2, 2, 3, 4, 4, 5, 6, 6};
List<Integer> uniqueNumbers = Arrays.stream(numbersWithDuplicates)
.distinct()
.boxed()
.collect(Collectors.toList());
System.out.println("중복 제거된 숫자들: " + uniqueNumbers);
// 8. 스트림을 사용한 변환
String[] names = {"Alice", "Bob", "Charlie", "David"};
List<String> upperCaseNames = Arrays.stream(names)
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println("대문자로 변환된 이름들: " + upperCaseNames);
// 9. 스트림을 사용한 그룹화
String[] colors = {"Red", "Blue", "Green", "Red", "Blue", "Yellow", "Green"};
Arrays.stream(colors)
.collect(Collectors.groupingBy(String::toLowerCase))
.forEach((key, value) -> System.out.println(key + ": " + value));
// 10. 스트림을 사용한 병렬 처리
int[] largeArray = new int[1000000];
for (int i = 0; i < largeArray.length; i++) {
largeArray[i] = (int) (Math.random() * 100);
}
long startTime = System.nanoTime();
int sum = Arrays.stream(largeArray).sum();
long endTime = System.nanoTime();
System.out.println("순차 스트림 합계: " + sum + ", 시간: " + (endTime - startTime) + " 나노초");
startTime = System.nanoTime();
sum = Arrays.stream(largeArray).parallel().sum();
endTime = System.nanoTime();
System.out.println("병렬 스트림 합계: " + sum + ", 시간: " + (endTime - startTime) + " 나노초");
}
}
- 배열을 문자열로 변환
toString()
메서드를 사용하여 배열을 문자열로 변환할 수 있습니다:
import java.util.Arrays;
public class ArrayToStringExample {
public static void main(String[] args) {
// 1. 기본적인 문자열 배열 변환
String[] fruits = {"Apple", "Banana", "Cherry", "Date", "Elderberry"};
System.out.println("기본 변환: " + Arrays.toString(fruits));
// 2. 정수 배열 변환
int[] numbers = {1, 2, 3, 4, 5};
System.out.println("정수 배열 변환: " + Arrays.toString(numbers));
// 3. 불리언 배열 변환
boolean[] bools = {true, false, true, false, true};
System.out.println("불리언 배열 변환: " + Arrays.toString(bools));
// 4. 객체 배열 변환
Person[] people = {
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 28)
};
System.out.println("객체 배열 변환: " + Arrays.toString(people));
// 5. 2차원 배열 변환
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println("2차원 배열 변환: " + Arrays.deepToString(matrix));
// 6. 부분 배열 변환
String[] partialFruits = Arrays.copyOfRange(fruits, 1, 4);
System.out.println("부분 배열 변환: " + Arrays.toString(partialFruits));
// 7. 사용자 정의 문자열 변환
String[] words = {"hello", "world", "java", "programming", "example"};
String customString = Arrays.stream(words)
.collect(Collectors.joining(", ", "[", "]"));
System.out.println("사용자 정의 문자열: " + customString);
// 8. 대용량 배열 변환 (성능 고려)
int[] largeArray = new int[1000000];
for (int i = 0; i < largeArray.length; i++) {
largeArray[i] = i;
}
long startTime = System.nanoTime();
String largeArrayString = Arrays.toString(largeArray);
long endTime = System.nanoTime();
System.out.println("대용량 배열 변환 시간: " + (endTime - startTime) + " 나노초");
// 9. 대용량 배열의 일부만 문자열로 변환
int[] partialLargeArray = Arrays.copyOfRange(largeArray, 0, 100);
System.out.println("대용량 배열의 일부 문자열: " + Arrays.toString(partialLargeArray));
// 10. 사용자 정의 객체의 toString() 메서드 오버라이딩
Person person = new Person("John", 35);
System.out.println("사용자 정의 객체 문자열: " + person);
}
}
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + " (age: " + age + ")";
}
}
배열 조작 시 주의사항
- null 처리: null인 배열에 조작을 시도하면
NullPointerException
이 발생할 수 있습니다. - 인덱스 범위: 배열의 인덱스 범위를 벗어나지 않도록 주의해야 합니다.
- 타입 일치: 배열의 타입과 조작하는 값의 타입이 일치해야 합니다.
실제 활용 예시
배열 조작은 다양한 알고리즘과 데이터 처리 작업에서 자주 사용됩니다:
import java.util.Arrays;
public class ArrayManipulationExample {
public static void main(String[] args) {
// 1. 학생 점수 통계 계산
int[] scores = {85, 92, 78, 95, 88, 76, 90, 89, 91, 84};
calculateStatistics(scores);
// 2. 문자열 배열에서 중복 제거
String[] words = {"apple", "banana", "apple", "cherry", "banana", "date"};
String[] uniqueWords = removeDuplicates(words);
System.out.println("중복 제거된 단어들: " + Arrays.toString(uniqueWords));
// 3. 정수 배열에서 특정 범위의 요소 찾기
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] result = findInRange(numbers, 3, 7);
System.out.println("3부터 7 사이의 숫자: " + Arrays.toString(result));
// 4. 문자열 배열에서 특정 문자열 포함 여부 확인
String[] fruits = {"apple", "banana", "cherry", "date", "elderberry"};
boolean contains = containsString(fruits, "cherry");
System.out.println("배열에 'cherry'가 포함되어 있나요? " + contains);
// 5. 정수 배열에서 최대값과 최소값 찾기
int[] values = {10, 5, 8, 12, 3, 15, 7};
int[] minMax = findMinMax(values);
System.out.println("최소값: " + minMax[0] + ", 최대값: " + minMax[1]);
// 6. 문자열 배열에서 빈도수 계산
String[] colors = {"red", "blue", "green", "red", "blue", "yellow", "green", "red"};
calculateFrequency(colors);
// 7. 정수 배열에서 특정 값의 위치 찾기
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int index = findIndex(array, 5);
System.out.println("5의 위치: " + index);
// 8. 문자열 배열에서 문자열 길이 기준 정렬
String[] names = {"John", "Alice", "Bob", "Charlie", "David"};
Arrays.sort(names, (a, b) -> Integer.compare(a.length(), b.length()));
System.out.println("이름 길이 기준 정렬: " + Arrays.toString(names));
// 9. 정수 배열에서 특정 범위의 합계 계산
int[] numbers2 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sum = sumInRange(numbers2, 3, 7);
System.out.println("3부터 7까지의 합계: " + sum);
// 10. 문자열 배열에서 특정 문자로 시작하는 단어 찾기
String[] words2 = {"hello", "world", "java", "programming", "example"};
String[] result2 = findWordsStartingWith(words2, 'p');
System.out.println("'p'로 시작하는 단어들: " + Arrays.toString(result2));
}
private static void calculateStatistics(int[] scores) {
int sum = Arrays.stream(scores).sum();
double average = (double) sum / scores.length;
int max = Arrays.stream(scores).max().getAsInt();
int min = Arrays.stream(scores).min().getAsInt();
System.out.println("합계: " + sum);
System.out.println("평균: " + average);
System.out.println("최대값: " + max);
System.out.println("최소값: " + min);
}
private static String[] removeDuplicates(String[] words) {
return Arrays.stream(words).distinct().toArray(String[]::new);
}
private static int[] findInRange(int[] numbers, int start, int end) {
return Arrays.stream(numbers)
.filter(num -> num >= start && num <= end)
.toArray();
}
private static boolean containsString(String[] fruits, String target) {
return Arrays.stream(fruits).anyMatch(fruit -> fruit.equals(target));
}
private static int[] findMinMax(int[] values) {
int min = Arrays.stream(values).min().getAsInt();
int max = Arrays.stream(values).max().getAsInt();
return new int[] {min, max};
}
private static void calculateFrequency(String[] colors) {
Arrays.stream(colors)
.collect(Collectors.groupingBy(color -> color, Collectors.counting()))
.forEach((color, count) -> System.out.println(color + ": " + count));
}
private static int findIndex(int[] array, int target) {
return Arrays.asList(array).indexOf(target);
}
private static int sumInRange(int[] numbers, int start, int end) {
return Arrays.stream(numbers)
.filter(num -> num >= start && num <= end)
.sum();
}
private static String[] findWordsStartingWith(String[] words, char prefix) {
return Arrays.stream(words)
.filter(word -> word.startsWith(String.valueOf(prefix)))
.toArray(String[]::new);
}
}
이 예시 코드는 배열 조작의 다양한 실제 활용 사례를 보여주며, 특히 데이터 처리, 통계 계산, 검색, 정렬, 그리고 필터링 등의 작업을 배열을 사용하여 수행하는 방법을 시연합니다. 또한 스트림 API를 사용하여 이러한 작업을 더 효율적으로 수행하는 방법도 보여줍니다.
- 학생 점수 통계 계산: 배열을 사용하여 학생들의 점수 통계를 계산합니다.
- 문자열 배열에서 중복 제거: 스트림을 사용하여 문자열 배열에서 중복을 제거합니다.
- 정수 배열에서 특정 범위의 요소 찾기: 특정 범위 내의 요소를 찾는 방법을 보여줍니다.
- 문자열 배열에서 특정 문자열 포함 여부 확인: 배열에 특정 문자열이 포함되어 있는지 확인하는 방법을 시연합니다.
- 정수 배열에서 최대값과 최소값 찾기: 배열에서 최대값과 최소값을 찾는 방법을 보여줍니다.
- 문자열 배열에서 빈도수 계산: 각 문자열의 발생 빈도를 계산하는 방법을 시연합니다.
- 정수 배열에서 특정 값의 위치 찾기: 배열에서 특정 값의 위치를 찾는 방법을 보여줍니다.
- 문자열 배열에서 문자열 길이 기준 정렬: 문자열의 길이를 기준으로 배열을 정렬하는 방법을 시연합니다.
- 정수 배열에서 특정 범위의 합계 계산: 특정 범위 내의 요소들의 합계를 계산하는 방법을 보여줍니다.
- 문자열 배열에서 특정 문자로 시작하는 단어 찾기: 특정 문자로 시작하는 단어들을 찾는 방법을 시연합니다.
편히 모아진 글 보시려면 아래 위키독스 링크 >>
https://wikidocs.net/book/17111
'JAVA' 카테고리의 다른 글
var 키워드 사용예제(2), 제약 사항 [코딩백과 with JAVA] (0) | 2024.12.21 |
---|---|
var 키워드, 사용 예제 [코딩백과 with JAVA] (0) | 2024.12.21 |
배열 다루기(1) (1) | 2024.12.21 |
배열 복사 [코딩백과 with JAVA] (0) | 2024.12.21 |
배열 생성, 초기화 및 접근 [코딩백과 with JAVA] (0) | 2024.12.21 |