[Java 8] Stream API ๊ธฐ๋ณธ ๋ฌธ๋ฒ ๋ฐ ํ์ฉ ์์
- -
Java 8์ Stream API๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ณํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด, ๋ฆฌ์คํธ, ๋งต ๋ฑ์ ์ปฌ๋ ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ํํฐ๋ง, ๋งคํ, ์ง๊ณ ๋ฑ ๋ค์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์ด๋ฒ์๋ Stream API์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ํ์ฉ ์์ ๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.
#1. Stream ์์ฑ
Stream์ Collection, List, Set, Array ๋ฑ์ ์๋ฃ๊ตฌ์กฐ๋ก๋ถํฐ ์์ฑ๋ ์ ์์ต๋๋ค. Stream์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
#1. 1. Collection์ผ๋ก๋ถํฐ ์์ฑ
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
#1. 2. Array๋ก๋ถํฐ ์์ฑ
String[] arr = {"a", "b", "c"};
Stream<String> stream = Arrays.stream(arr);
#1. 3. Stream.of() ์ด์ฉ
Stream<String> stream = Stream.of("a", "b", "c");
#2. Stream ์ค๊ฐ ์ฐ์ฐ
Stream์ ๋ํด์ ์ค๊ฐ ์ฐ์ฐ์ ์ํํ ์ ์์ต๋๋ค. ์ค๊ฐ ์ฐ์ฐ์ Stream์ ๋ฐํํ๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ๊ฐ์ ์ค๊ฐ ์ฐ์ฐ์ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
#2. 1. filter()
์กฐ๊ฑด์ ๋ง๋ ์์๋ง์ ์ ํํ์ฌ Stream์ผ๋ก ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry", "durian");
Stream<String> filteredStream = stream.filter(str -> str.length() > 5);
#2. 2. map()
๊ฐ ์์์ ๋ํด ๋งคํ ํจ์๋ฅผ ์ ์ฉํ์ฌ ์๋ก์ด Stream์ ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry");
Stream<Integer> mappedStream = stream.map(str -> str.length());
#2. 3. flatMap()
๊ฐ ์์์ ๋ํด ๋งคํ ํจ์๋ฅผ ์ ์ฉํ์ฌ ์๋ก์ด Stream์ ์์ฑํ๊ณ , ์ด๋ฅผ ํ๋์ Stream์ผ๋ก ๋ณํฉํ์ฌ ๋ฐํํฉ๋๋ค.
Stream<List<Integer>> stream = Stream.of(Arrays.asList(1, 2), Arrays.asList(3, 4));
Stream<Integer> flatMappedStream = stream.flatMap(list -> list.stream());
#2. 4. sorted()
์์๋ฅผ ์ ๋ ฌํ์ฌ Stream์ผ๋ก ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("banana", "apple", "durian", "cherry");
Stream<String> sortedStream = stream.sorted();
#2. 5. distinct()
์ค๋ณต๋ ์์๋ฅผ ์ ๊ฑฐํ Stream์ ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "apple", "cherry");
Stream<String> distinctStream = stream.distinct();
#2. 6. limit()
์ฒ๋ฆฌํ ์์์ ๊ฐ์๋ฅผ ์ ํํ์ฌ Stream์ ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry", "durian");
Stream<String> limitedStream = stream.limit(2);
#2. 7. skip()
์ฒ๋ฆฌํ ์์์ ๊ฐ์๋ฅผ ๊ฑด๋๋ฐ๊ณ , ๋๋จธ์ง ์์๋ก ๊ตฌ์ฑ๋ Stream์ ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry", "durian");
Stream<String> skippedStream = stream.skip(2);
#3. Stream ์ต์ข ์ฐ์ฐ
Stream์ ๋ํด์ ์ต์ข ์ฐ์ฐ์ ์ํํ ์ ์์ต๋๋ค. ์ต์ข ์ฐ์ฐ์ Stream์ ๋ฐํํ์ง ์๊ณ , ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
#3. 1. forEach()
๊ฐ ์์์ ๋ํด ์์ ์ ์ํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry", "durian");
stream.forEach(str -> System.out.println(str));
#3. 2. toArray()
Stream์ ์์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry", "durian");
String[] arr = stream.toArray(String[]::new);
#3. 3. reduce()
Stream์ ์์๋ฅผ ํ๋๋ก ์ค์ฌ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
int sum = stream.reduce(0, (acc, val) -> acc + val);
#3. 4. collect()
Stream์ ์์๋ฅผ ์์งํ์ฌ ์๋ก์ด Collection, List, Set ๋ฑ์ผ๋ก ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry", "durian");
List<String> list = stream.collect(Collectors.toList());
#3. 5. count()
Stream์ ์์์ ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry", "durian");
long count = stream.count();
#3. 6. anyMatch()
ํ๋ ์ด์์ ์์๊ฐ ์กฐ๊ฑด์ ๋ง๋์ง ๊ฒ์ฌํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry", "durian");
boolean result = stream.anyMatch(str -> str.startsWith("a"));
#3. 7. allMatch()
๋ชจ๋ ์์๊ฐ ์กฐ๊ฑด์ ๋ง๋์ง ๊ฒ์ฌํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry", "durian");
boolean result = stream.allMatch(str -> str.length() > 3);
#3. 8. noneMatch()
๋ชจ๋ ์์๊ฐ ์กฐ๊ฑด์ ๋ง์ง ์๋์ง ๊ฒ์ฌํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
Stream<String> stream = Stream.of("apple", "banana", "cherry", "durian");
boolean result = stream.noneMatch(str -> str.startsWith("z"));
#4. ํ์ฉ ์์
์คํธ๋ฆผ์์ ์์ ์ฐพ๊ธฐ
List<String> list = Arrays.asList("apple", "banana", "cherry");
Optional<String> result = list.stream().filter(s -> s.startsWith("a")).findFirst();
if (result.isPresent()) {
System.out.println(result.get());
}
filter() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ๋ง๋ ์์๋ฅผ ์ฐพ๊ณ findFirst() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ฐพ์ต๋๋ค. findFirst() ๋ฉ์๋๋ Optional ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ฏ๋ก, isPresent() ๋ฉ์๋๋ก ๊ฒฐ๊ณผ๊ฐ ์กด์ฌํ๋์ง ํ์ธํ ํ, get() ๋ฉ์๋๋ก ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
์คํธ๋ฆผ์์ ์์ ์์งํ๊ธฐ
List<String> list = Arrays.asList("apple", "banana", "cherry");
List<String> result = list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList());
System.out.println(result);
collect() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์ถ์ถํ ์์๋ฅผ ์ปฌ๋ ์ ์ผ๋ก ์์งํฉ๋๋ค. Collectors.toList() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ๋ก ์์งํฉ๋๋ค.
์คํธ๋ฆผ์์ ์์ ์ง๊ณํ๊ธฐ
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);
System.out.println(sum);
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().reduce(0, (a, b) -> a + b);
System.out.println(sum);
**reduce()**๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์์๋ฅผ ์ฐ์ฐํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ reduce() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ **list**์คํธ๋ฆผ์์ ๋ชจ๋ ์์์ ํฉ์ ๊ณ์ฐํ ํ, ํด๋น ํฉ์ ์ถ๋ ฅํฉ๋๋ค. ์ด๋, **reduce()**๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ธ์๋ ์ด๊ธฐ๊ฐ์ ๋ํ๋ด๋ฉฐ, ๋ ๋ฒ์งธ ์ธ์๋ ๊ฐ ์์๋ฅผ ์ฒ๋ฆฌํ๋ ๋๋ค์์ ๋๋ค.
์คํธ๋ฆผ์์ ์์ ๊ทธ๋ฃนํํ๊ธฐ
List<Person> people = Arrays.asList(
new Person("John", 25),
new Person("Jane", 30),
new Person("Bob", 25),
new Person("Alice", 30)
);
Map<Integer, List<Person>> result = people.stream().collect(Collectors.groupingBy(Person::getAge));
System.out.println(result);
groupingBy() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฅผ ๊ทธ๋ฃนํํ ์ ์์ต๋๋ค. ์ด ๋ฉ์๋๋ ๊ทธ๋ฃนํ ๊ธฐ์ค์ด ๋๋ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค. ์ ์์ ์์๋ Person ํด๋์ค์์ ๋์ด๋ฅผ ๊ฐ์ ธ์ค๋ getAge() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃนํ๋ฅผ ์ํํฉ๋๋ค. groupingBy() ๋ฉ์๋๋ Map ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ฏ๋ก, ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด System.out.println() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ธฐ
List<String> list = Arrays.asList("apple", "banana", "cherry", "date", "eggfruit");
long count = list.parallelStream().filter(s -> s.startsWith("a")).count();
System.out.println(count);
parallelStream() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ ๋ณ๋ ฌ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ parallelStream() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ณ , filter() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ "a"๋ก ์์ํ๋ ์์๋ฅผ ์ถ์ถํ ํ, count() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์์์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ด์ธ์๋ Stream API์์๋ sorted(), distinct(), skip(), limit() ๋ฑ ๋ค์ํ ์ฐ์ฐ์๊ฐ ์ ๊ณต๋ฉ๋๋ค. ์ด๋ฌํ ์ฐ์ฐ์๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Optional ํ์ฉํ๊ธฐ
Optional<String> optional = Optional.of("Hello");
if (optional.isPresent()) {
String result = optional.get();
System.out.println(result);
} else {
System.out.println("No value");
}
Optional ํด๋์ค๋ null-safeํ ์ฐ์ฐ์ ์ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ ์์ ์์๋ Optional ํด๋์ค์ of() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ "Hello" ๋ฌธ์์ด์ ๊ฐ์ผ Optional ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ isPresent() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๊ฐ์ฒด๊ฐ ๋น์ด ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. ๊ฐ์ฒด๊ฐ ๋น์ด ์์ง ์์ผ๋ฉด get() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๊ฐ์ ๊ฐ์ ธ์์ ์ถ๋ ฅํฉ๋๋ค.
Stream์ ๋ฐฐ์ด๋ก ๋ณํํ๊ธฐ
List<String> list = Arrays.asList("apple", "banana", "cherry");
String[] array = list.stream().toArray(String[]::new);
System.out.println(Arrays.toString(array));
toArray() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ ๋ฐฐ์ด๋ก ๋ณํํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ String ํ์ ์ ์์๋ก ๊ฐ๋ List ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ, stream() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ผ๋ก ๋ณํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ toArray() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ String ํ์ ์ ๋ฐฐ์ด๋ก ๋ณํํฉ๋๋ค.
์คํธ๋ฆผ์ ๋ชจ๋ ์์๋ฅผ ์ฒ๋ฆฌํ๊ธฐ
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.forEach(System.out::println);
forEach() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ ๋ชจ๋ ์์๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ Integer ํ์ ์ ์์๋ก ๊ฐ๋ List ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ, forEach() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
Stream์์ ๊ฐ ์ถ์ถํ๊ธฐ
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().mapToInt(Integer::intValue).sum();
System.out.println(sum);
์คํธ๋ฆผ์์ ๊ฐ์ ์ถ์ถํ ๋๋ mapToInt(), mapToLong(), **mapToDouble()**๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ํํ๋ก ๋ณํํ ํ์ ์ถ์ถํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ mapToInt() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Integer ํ์ ์ int ํ์ ์ผ๋ก ๋ณํํ ํ์, sum() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์์์ ํฉ์ ๊ตฌํฉ๋๋ค.
Stream์์ ์ค๋ณต ์์ ์ ๊ฑฐํ๊ธฐ
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 2, 4);
List<Integer> result = list.stream().distinct().collect(Collectors.toList());
System.out.println(result);
distinct() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์ค๋ณต ์์๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ distinct() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ณต๋ **2**์ 4 ์์๋ฅผ ์ ๊ฑฐํ ํ, toList() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด List ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
Stream์์ ์์๋ฅผ ๋ถํ ํ๊ธฐ
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Map<Boolean, List<Integer>> partitioned = list.stream().collect(Collectors.partitioningBy(i -> i % 2 == 0));
System.out.println(partitioned);
partitioningBy() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์์๋ฅผ ๋ถํ ํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ **partitioned**๋ผ๋ Map ๊ฐ์ฒด์ 2๋ก ๋๋์ด ๋จ์ด์ง๋ ์์์ ์๋ ์์๋ฅผ ๋ถํ ํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค.
Stream์์ ์์๋ฅผ ์ ๋ ฌํ๊ธฐ
List<Integer> list = Arrays.asList(5, 3, 2, 1, 4);
List<Integer> sorted = list.stream().sorted().collect(Collectors.toList());
System.out.println(sorted);
sorted() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์์๋ฅผ ์ ๋ ฌํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ sorted() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์คํธ๋ฆผ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ํ, toList() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด List ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
Stream์์ ์์๋ฅผ ์ ํํ๊ธฐ
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> limited = list.stream().limit(3).collect(Collectors.toList());
System.out.println(limited);
limit() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์์๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ limit() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์คํธ๋ฆผ์์ ์ต๋ 3๊ฐ์ ์์๋ง์ ์ถ์ถํ ํ, toList() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด List ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
Stream์์ ์์๋ฅผ ๊ฑด๋๋ฐ๊ธฐ
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> skipped = list.stream().skip(3).collect(Collectors.toList());
System.out.println(skipped);
skip() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์์๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๋ค. ์ ์์ ์์๋ skip() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์คํธ๋ฆผ์์ ์ฒ์ 3๊ฐ์ ์์๋ฅผ ๊ฑด๋๋ด ํ, ๋๋จธ์ง ์์๋ฅผ ์ถ์ถํ ํ **toList()**๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด **List**๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
Stream์์ ์์๋ฅผ ๋งคํํ๊ธฐ
List<String> words = Arrays.asList("hello", "world");
List<String> uniqueCharacters = words.stream().flatMap(s -> Arrays.stream(s.split("")))
.distinct()
.collect(Collectors.toList());
System.out.println(uniqueCharacters);
flatMap() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์์๋ฅผ ๋งคํํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ flatMap() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ words ๋ฆฌ์คํธ์์ ๊ฐ ๋ฌธ์์ด์ ๋ฐฐ์ด๋ก ๋ถํ ํ๊ณ , ๊ฐ ๋ฌธ์๋ฅผ ๊ฐ๋ณ ์์๋ก ๋ง๋ ํ ํด๋น ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด ์คํธ๋ฆผ์ ์์ฑํฉ๋๋ค. ์ดํ distinct() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ณต ์์๋ฅผ ์ ๊ฑฐํ ํ, toList() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด List ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
Stream์์ ์์๋ฅผ ์ง๊ณํ๊ธฐ
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
IntSummaryStatistics stats = list.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println(stats);
summaryStatistics() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์์๋ฅผ ์ง๊ณํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ summaryStatistics() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ list ์คํธ๋ฆผ์์ ์์์ ํฉ, ํ๊ท , ์ต๋๊ฐ, ์ต์๊ฐ, ๊ฐ์ ๋ฑ์ ๊ณ์ฐํ ํ, ํด๋น ๊ฐ์ ํฌํจํ๋ ์๋ก์ด IntSummaryStatistics ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์ดํ, ํด๋น ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
Stream์์ ์์๋ฅผ ์นด์ดํธํ๊ธฐ
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
long count = list.stream().count();
System.out.println(count);
count() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์์๋ฅผ ์นด์ดํธํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ count() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ list ์คํธ๋ฆผ์์ ์์์ ๊ฐ์๋ฅผ ๊ณ์ฐํ ํ, ํด๋น ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
Stream์์ ์์๋ฅผ ๋ณํํ๊ธฐ
List<String> list = Arrays.asList("apple", "banana", "cherry", "date", "elderberry", "fig");
List<String> transformedList = list.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
System.out.println(transformedList);
map() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์์ ์์๋ฅผ ๋ณํํ ์ ์์ต๋๋ค. ์ ์์ ์์๋ map() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ list ์คํธ๋ฆผ์์ ๋ชจ๋ ๋ฌธ์์ด์ ๋๋ฌธ์๋ก ๋ณํํ ํ, ํด๋น ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด List ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
๋ง์น๋ฉฐ..
Java Stream API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋์ฑ ์ฝ๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ฒ๋ฆฌ๋๋ ๋ด์ฉ์ ์ ๋ฆฌํด ๋ดค์ต๋๋ค. Stream์ ๋ค์ํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์์ผ๋ก๋ ๋ ๋น ๋ฅด๊ณ ํ์ง ์ข์ ์์ค์ฝ๋๋ฅผ ์์ฑํ๋ ์ข์ ๊ฐ๋ฐ์๊ฐ ๋๋๋ก ํ ๋ฐ์๊ตญ ๋ ์์ผ๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค. ๋ง์ด ์์ ๋ถํ๋๋ฆด๊ฒ์. ๐
'Back-End > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JUnit] JUnit์ ์ด์ฉํ TDD(Test-Driven Development) (0) | 2023.03.01 |
---|---|
[Java] ์ค์ผ์ค๋ฌ ๋ฐฐ์น (2) | 2023.02.04 |
[Java] ํธ๋ฆฌํ Lombok ๊ธฐ๋ฅ ์ ๋ฆฌ (0) | 2023.02.04 |
[Java] IntelliJ์์ lombok ์ฌ์ฉํ๊ธฐ (0) | 2023.02.04 |
[Java] ํ๊ฒฝ๋ณ์ ์ค์ (0) | 2023.02.04 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค. ๐