JAVA
[JAVA] - Stream API 기본 문법 및 활용 예제
nam_ji
2024. 7. 22. 20:17
Stream API 기본 문법 및 활용 예제
Stream 생성
- Stream은 Collection, List, Set, Array 등의 자료구조로부터 생성될 수 있습니다.
1. Collection으로 생성
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------Collection Stream 생성---------");
CreateStream1 createStream1 = new CreateStream1();
createStream1.createStream();
}
}
class CreateStream1 {
public void createStream() {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
}
}
/*
---------Collection Stream 생성---------
java
spring
springBoot
jpa
queryDSL
*/
2. Array로 생성
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------Array Stream 생성---------");
CreateStream2 createStream2 = new CreateStream2();
createStream2.createStream();
}
}
class CreateStream2 {
public void createStream() {
String[] arr = {"java", "spring", "springBoot", "jpa", "queryDSL"};
Stream<String> stream = Arrays.stream(arr);
stream.forEach(System.out::println);
}
}
/*
출력
---------Array Stream 생성---------
java
spring
springBoot
jpa
queryDSL
*/
3. Stream.of() 이용
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------Stream.of Stream 생성---------");
CreateStream3 createStream3 = new CreateStream3();
createStream3.createStream();
}
}
class CreateStream3 {
public void createStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
stream.forEach(System.out::println);
}
}
/*
출력
---------Stream.of Stream 생성---------
java
spring
springBoot
jpa
queryDSL
*/
Stream 중간 연산
- Stream에 대해서 중간 연산을 수행할 수 있습니다. 중간 연산은 Stream을 반환하기 때문에, 여러 개의 중간 연산을 연결하여 사용할 수 있습니다.
1. filter()
- 조건에 맞는 요소만을 선택하여 Stream으로 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------filter Stream 중간 연산---------");
IntermediateOperationStream1 intermediateOperationStream1 = new IntermediateOperationStream1();
intermediateOperationStream1.IntermediateOperationStream();
}
}
class IntermediateOperationStream1 {
public void IntermediateOperationStream() {
System.out.println("filter 조건 : 원소 중 길이 5 이상인 원소 출력");
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> filterStream = stream.filter(str -> str.length() > 5);
filterStream.forEach(System.out::println);
}
}
/*
출력
---------filter Stream 중간 연산---------
filter 조건 : 원소 중 길이 5 이상인 원소 출력
spring
springBoot
queryDSL
*/
2. map()
- 각 요소에 대해 매핑 함수를 적용하여 새로운 Stream을 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------map Stream 중간 연산---------");
IntermediateOperationStream2 intermediateOperationStream2 = new IntermediateOperationStream2();
intermediateOperationStream2.IntermediateOperationStream();
}
}
class IntermediateOperationStream2 {
public void IntermediateOperationStream() {
System.out.println("map 조건 : 각 원소 길이만 출력");
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<Integer> mapStream = stream.map(String::length);
mapStream.forEach(System.out::println);
}
}
/*
출력
---------map Stream 중간 연산---------
map 조건 : 각 원소 길이만 출력
4
6
10
3
8
*/
3. flatMap()
- 각 요소에 대해 매핑 함수를 적용하여 새로운 Stream을 생성하고, 이를 하나의 Stream으로 병합하여 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------flatMap Stream 중간 연산---------");
IntermediateOperationStream3 intermediateOperationStream3 = new IntermediateOperationStream3();
intermediateOperationStream3.IntermediateOperationStream();
}
}
class IntermediateOperationStream3 {
public void IntermediateOperationStream() {
System.out.println("flatMap 조건 : 두 Stream을 새롭게 생성하고 하나의 Stream으로 병합");
Stream<List<Integer>> stream = Stream.of(Arrays.asList(1, 2), Arrays.asList(3, 4));
Stream<Integer> flatMapStream = stream.flatMap(Collection::stream);
flatMapStream.forEach(System.out::println);
}
}
/*
출력
---------flatMap Stream 중간 연산---------
flatMap 조건 : 두 Stream을 새롭게 생성하고 하나의 Stream으로 병합
1
2
3
4
*/
4. sorted()
- 요소를 정렬하여 Stream으로 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------sorted Stream 중간 연산---------");
IntermediateOperationStream4 intermediateOperationStream4 = new IntermediateOperationStream4();
intermediateOperationStream4.IntermediateOperationStream();
}
}
class IntermediateOperationStream4 {
public void IntermediateOperationStream() {
System.out.println("sort 조건 : 기본(오름차순) 정렬");
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> sortStream = stream.sorted();
sortStream.forEach(System.out::println);
}
}
/*
출력
---------sorted Stream 중간 연산---------
sort 조건 : 기본(오름차순) 정렬
java
jpa
queryDSL
spring
springBoot
*/
5. distinct()
- 중복된 요소를 제거한 Stream을 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------distinct Stream 중간 연산---------");
IntermediateOperationStream5 intermediateOperationStream5 = new IntermediateOperationStream5();
intermediateOperationStream5.IntermediateOperationStream();
}
}
class IntermediateOperationStream5 {
public void IntermediateOperationStream() {
System.out.println("distinct 조건 : 중복 요소 제거");
Stream<String> stream = Stream.of("java", "java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> distinctStream = stream.distinct();
distinctStream.forEach(System.out::println);
}
}
/*
출력
---------distinct Stream 중간 연산---------
distinct 조건 :
java
spring
springBoot
jpa
queryDSL
*/
6. limit()
- 처리할 요소의 개수를 제한하여 Stream을 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------limit Stream 중간 연산---------");
IntermediateOperationStream6 intermediateOperationStream6 = new IntermediateOperationStream6();
intermediateOperationStream6.IntermediateOperationStream();
}
}
class IntermediateOperationStream6 {
public void IntermediateOperationStream() {
System.out.println("limit 조건 : 입력한 파라미터 만큼만 출력");
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> limitStream = stream.limit(3);
limitStream.forEach(System.out::println);
}
}
/*
출력
---------limit Stream 중간 연산---------
java
spring
springBoot
*/
7. skip()
- 처리할 요소의 개수를 건너뛰고, 나머지 요소로 구성된 Stream을 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------skip Stream 중간 연산---------");
IntermediateOperationStream7 intermediateOperationStream7 = new IntermediateOperationStream7();
intermediateOperationStream7.IntermediateOperationStream();
}
}
class IntermediateOperationStream7 {
public void IntermediateOperationStream() {
System.out.println("입력한 파리미터 만큼 건너뛰고 출력");
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> skip = stream.skip(3);
skip.forEach(System.out::println);
}
}
/*
출력
---------skip Stream 중간 연산---------
jpa
queryDSL
*/
Stream 최종 연산
- Stream에 대해서 최종 연산을 수행할 수 있습니다. 최종 연산은 Stream을 반환하지 않고, 최종 결과를 반환합니다.
1. forEach()
- 각 요소에 대해 작업을 수행합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------forEach Stream 최종 연산---------");
FinalOperationStream1 finalOperationStream1 = new FinalOperationStream1();
finalOperationStream1.FinalOperationStream();
}
}
class FinalOperationStream1 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
stream.forEach(System.out::println);
}
}
/*
출력
---------forEach Stream 최종 연산---------
java
spring
springBoot
jpa
queryDSL
*/
2. toArray()
- Stream의 요소를 배열로 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------toArray Stream 최종 연산---------");
FinalOperationStream2 finalOperationStream2 = new FinalOperationStream2();
finalOperationStream2.FinalOperationStream();
}
}
class FinalOperationStream2 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
String[] toArrayStream = stream.toArray(String[]::new);
System.out.println(Arrays.toString(toArrayStream));
}
}
/*
출력
---------toArray Stream 최종 연산---------
[java, spring, springBoot, jpa, queryDSL]
*/
3. reduce()
- Stream의 요소를 하나로 줄여 하나의 결과를 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------reduce Stream 최종 연산---------");
FinalOperationStream3 finalOperationStream3 = new FinalOperationStream3();
finalOperationStream3.FinalOperationStream();
}
}
class FinalOperationStream3 {
public void FinalOperationStream() {
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
int reduceStream = stream.reduce(0, Integer::sum);
System.out.println(reduceStream);
}
}
/*
출력
---------reduce Stream 최종 연산---------
15
*/
4. collect()
- Stream의 요소를 수집하여 새로운 Collection, List, Set 등으로 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------collect Stream 최종 연산---------");
FinalOperationStream4 finalOperationStream4 = new FinalOperationStream4();
finalOperationStream4.FinalOperationStream();
}
}
class FinalOperationStream4 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
List<String> collectStream = stream.toList();
System.out.println(collectStream);
}
}
/*
출력
---------collect Stream 최종 연산---------
[java, spring, springBoot, jpa, queryDSL]
*/
5. count()
- Stream의 요소의 개수를 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------count Stream 최종 연산---------");
FinalOperationStream5 finalOperationStream5 = new FinalOperationStream5();
finalOperationStream5.FinalOperationStream();
}
}
class FinalOperationStream5 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
long count = stream.count();
System.out.println(count);
}
}
/*
출력
---------count Stream 최종 연산---------
5
*/
6. anyMatch()
- 하나 이상의 요소가 조건에 맞는지 검사하여 결과를 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------anyMatch Stream 최종 연산---------");
FinalOperationStream6 finalOperationStream6 = new FinalOperationStream6();
finalOperationStream6.FinalOperationStream();
}
}
class FinalOperationStream6 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
boolean anyMatchStream = stream.anyMatch(str -> str.startsWith("j"));
System.out.println(anyMatchStream);
}
}
/*
출력
---------anyMatch Stream 최종 연산---------
true
*/
7.allMatch()
- 모든 요소가 조건에 맞는지 검사하여 결과를 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------allMatch Stream 최종 연산---------");
FinalOperationStream7 finalOperationStream7 = new FinalOperationStream7();
finalOperationStream7.FinalOperationStream();
}
}
class FinalOperationStream7 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
boolean allMatchStream = stream.allMatch(str -> str.length() > 5);
System.out.println(allMatchStream);
}
}
/*
출력
---------allMatch Stream 최종 연산---------
false
*/
8. noneMatch()
- 모든 요소가 조건에 맞지 않는지 검사하여 결과를 반환합니다.
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------noneMatch Stream 최종 연산---------");
FinalOperationStream8 finalOperationStream8 = new FinalOperationStream8();
finalOperationStream8.FinalOperationStream();
}
}
class FinalOperationStream8 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
boolean noneMatchStream = stream.noneMatch(str -> str.startsWith("k"));
System.out.println(noneMatchStream);
}
}
/*
출력
---------noneMatch Stream 최종 연산---------
true
*/
Stream 활용 예제
스트림에서 요소 찾기
- filter 메서드를 사용하여 조건에 맞는 요소를 찾고 findFirst 메서드를 사용하여 첫 번째 요소를 찾습니다.
- findFirst 메서드는 Optional 인스턴스를 반환하므로, isPresent 메서드로 결과가 존재하는지 확인한 후, get 메서드로 결과를 가져옵니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림에서 요소 찾기---------");
StreamAPI1 streamAPI1 = new StreamAPI1();
streamAPI1.streamAPI(list);
}
}
class StreamAPI1 {
public void streamAPI(List<String> list) {
Optional<String> findElement =
list.stream()
.filter(s -> s.startsWith("j"))
.findFirst();
findElement.ifPresent(System.out::println);
}
}
/*
출력
---------스트림에서 요소 찾기---------
java
*/
스트림에서 요소 수집하기
- collect 메서드를 사용하여 스트림에서 추출한 요소를 컬렉션으로 수집합니다.
- Collectors.toList 메서드를 사용하여 리스트로 수집합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림에서 요소 수집---------");
StreamAPI2 streamAPI2 = new StreamAPI2();
streamAPI2.streamAPI(list);
}
}
class StreamAPI2 {
public void streamAPI(List<String> list) {
List<String> collectElement =
list.stream()
.filter(s -> s.startsWith("j"))
.toList();
System.out.println(collectElement);
}
}
/*
출력
---------스트림에서 요소 수집---------
[java, jpa]
*/
스트림에서 요소 집계하기
- reduce 메서드를 사용하여 스트림에서 요소를 연산할 수 있습니다.
- 예제를 보면 reduce 메서드를 사용하여 numList 스트림에서 모든 요소의 합을 계산한 후, 해당 합을 출력합니다.
- reduce 메서드의 첫 번째 인자는 초기값을 나타내며, 두 번째 인자는 각 요소를 처리하는 람다식입니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림에서 요소 집계---------");
StreamAPI3 streamAPI3 = new StreamAPI3();
streamAPI3.streamAPI(numList);
}
}
class StreamAPI3 {
public void streamAPI(List<Integer> numList) {
int aggregationElement = numList.stream().reduce(0, Integer::sum);
System.out.println(aggregationElement);
}
}
/*
출력
---------스트림에서 요소 집계---------
15
*/
스트림에서 요소 그룹화하기
- groupingBy 메서드를 사용하여 요소를 구룹화할 수 있습니다. 이 메서드는 그룹화 기준이 되는 함수를 인수로 받습니다.
- 예제를 보면 classes 클래스에서 과목을 가져오는 getSubject 메서드를 사용하여 그룹화를 수행합니다. groupingBy 메서드는 Map 인스턴스를 반환하므로, 결과를 출력하려면 println 메서드를 사용합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림에서 요소 그룹화---------");
StreamAPI4 streamAPI4 = new StreamAPI4();
streamAPI4.streamAPI();
}
}
class StreamAPI4 {
public void streamAPI() {
List<Classes> classes = Arrays.asList(
new Classes("Java", 1),
new Classes("Spring", 2),
new Classes("SpringBoot", 3),
new Classes("JPA", 4),
new Classes("QueryDSL", 5));
Map<String, List<Classes>> groupElement = classes.stream().collect(Collectors.groupingBy(Classes::getSubject));
System.out.println(groupElement);
}
}
class Classes {
private final String subject;
private final int period;
public Classes(String subject, int period) {
this.subject = subject;
this.period = period;
}
public String getSubject() {
return subject;
}
public int getPeriod() {
return period;
}
@Override
public String toString() {
return "Classes [subject=" + subject + ", period=" + period + "]";
}
}
/*
출력
---------스트림에서 요소 그룹화---------
{Java=[Classes [subject=Java, period=1]], QueryDSL=[Classes [subject=QueryDSL, period=5]], JPA=[Classes [subject=JPA, period=4]], SpringBoot=[Classes [subject=SpringBoot, period=3]], Spring=[Classes [subject=Spring, period=2]]}
*/
병렬 처리하기
- parallelStream 메서드를 사용하여 스트림을 병렬 처리할 수 있습니다.
- 병렬 처리를 사용하면 대용량 데이터를 빠르게 처리할 수 있습니다.
- 예제를 보면 parallelStream 메서드를 사용하여 스트림을 병렬 처리하고, filter 메서드를 사용하여 j로 시작하는 요소를 추출한 후, count 메서드를 사용하여 해당 요소의 수를 계산합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 병렬 처리---------");
StreamAPI5 streamAPI5 = new StreamAPI5();
streamAPI5.streamAPI(list);
}
}
class StreamAPI5 {
public void streamAPI(List<String> list) {
long parallel = list.parallelStream().filter(s -> s.startsWith("j")).count();
System.out.println(parallel);
}
}
/*
출력
---------스트림 병렬 처리---------
2
*/
Optional 활용하기
- Optional 클래스는 null-safe한 연산을 수행할 때 사용됩니다.
- 예제를 보면 Optional 클래스의 of 메서드를 사용하여 Java 문자열을 감싼 Optional 객체를 생성합니다.
- 그리고 isPresent 메서드를 사용하여 해당 객체가 비어 있는지 여부를 확인합니다.
- 객체가 비어 있지 않으면 get 메서드를 사용하여 해당 값을 가져와 출력합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 Optional 활용---------");
StreamAPI6 streamAPI6 = new StreamAPI6();
streamAPI6.streamAPI();
}
}
class StreamAPI6 {
public void streamAPI() {
Optional<String> optional = Optional.of("Java");
if (optional.isPresent()) {
String result = optional.get();
System.out.println(result);
} else {
System.out.println("No Value");
}
}
}
/*
출력
---------스트림 Optional 활용---------
Java
*/
Stream을 배열로 변환하기
- toArray 메서드를 사용하여 스트림을 배열로 변환할 수 있습니다.
- 예제에서는 String 타입을 요소로 갖는 List 객체를 생성한 후, stream 메서드를 사용하여 스트림으로 변환합니다.
- 그리고 toArray 메서드를 사용하여 스트림을 String 타입의 배열로 변환합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 배열 변환---------");
StreamAPI7 streamAPI7 = new StreamAPI7();
streamAPI7.streamAPI(list);
}
}
class StreamAPI7 {
public void streamAPI(List<String> list) {
String[] conversionArray = list.toArray(String[]::new);
System.out.println(Arrays.toString(conversionArray));
}
}
/*
출력
---------스트림 배열 변환---------
[java, spring, springBoot, jpa, queryDSL]
*/
스트림의 모든 요소 처리하기
- forEach 메서드를 사용하여 스트림의 모든 요소를 처리할 수 있습니다.
- 예제를 보면 Integer 타입을 요소로 갖는 List 객체를 생성한 후, forEach 메서드를 사용하여 해당 요소를 출력합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 모든 요소 처리---------");
StreamAPI8 streamAPI8 = new StreamAPI8();
streamAPI8.streamAPI(list);
}
}
class StreamAPI8 {
public void streamAPI(List<String> list) {
list.forEach(System.out::println);
}
}
/*
출력
---------스트림 모든 요소 처리---------
java
spring
springBoot
jpa
queryDSL
*/
스트림에서 값 추출하기
- 스트림에서 값을 추출할 때는 mapToInt, mapToLong, mapToDouble과 같은 메서드를 사용하여 원하는 형태로 변환한 후 추출할 수 있습니다.
- 예제를 보면 mapToInt 메서드를 사용하여 Integer 타입을 int 타입으로 변환 후 sum 메서드를 사용하여 모든 요소의 합을 구합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 값 추출---------");
StreamAPI9 streamAPI9 = new StreamAPI9();
streamAPI9.streamAPI(numList);
}
}
class StreamAPI9 {
public void streamAPI(List<Integer> numList) {
int valueExtraction =
numList.stream()
.mapToInt(Integer::intValue)
.sum();
System.out.println(valueExtraction);
}
}
/*
출력
---------스트림 값 추출---------
15
*/
스트림에서 중복 요소 제거하기
- distinct 메서드를 사용하여 스트림에서 중복 요소를 제거할 수 있습니다.
- 예제를 보면 distinct 메서드를 사용하여 중복된 1 요소를 제거한 후, toList 메서드를 사용하여 해당 요소를 제거한 새로운 List 객체를 출력합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 중복 제거---------");
StreamAPI10 streamAPI10 = new StreamAPI10();
streamAPI10.streamAPI();
}
}
class StreamAPI10 {
public void streamAPI() {
List<Integer> arr = Arrays.asList(1, 2, 3, 4, 5, 1);
List<Integer> deduplication =
arr.stream()
.distinct()
.toList();
System.out.println(deduplication);
}
}
/*
출력
---------스트림 중복 제거---------
[1, 2, 3, 4, 5]
*/
스트림에서 요소 분할하기
- partitioningBy 메서드를 사용하여 스트림에서 요소를 분할할 수 있습니다.
- 예제를 보면 splitElements라는 Map 객체에 2로 나누어 떨어지는 요소와 아닌 요소를 분할한 결과를 저장합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 요소 분할---------");
StreamAPI11 streamAPI11 = new StreamAPI11();
streamAPI11.streamAPI(numList);
}
}
class StreamAPI11 {
public void streamAPI(List<Integer> numList) {
Map<Boolean, List<Integer>> splitElements =
numList.stream()
.collect(Collectors.partitioningBy(i -> i % 2 == 0));
System.out.println(splitElements);
}
}
/*
출력
---------스트림 요소 분할---------
{false=[1, 3, 5], true=[2, 4]}
*/
스트림에서 요소 정렬하기
- sorted 메서드를 사용하여 스트림에서 요소를 정렬할 수 있습니다.
- 예제를 보면 sorted 메서드를 사용하여 해당 스트림을 오름차순으로 정렬한 후, toList 메서드를 사용하여 해당 요소를 포함하는 새로운 List 객체를 생성합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 요소 정렬---------");
StreamAPI12 streamAPI12 = new StreamAPI12();
streamAPI12.streamAPI();
}
}
class StreamAPI12 {
public void streamAPI() {
List<Integer> list = Arrays.asList(5, 1, 3, 2, 4);
List<Integer> sortElement =
list.stream()
.sorted()
.toList();
System.out.println(sortElement);
}
}
/*
출력
---------스트림 요소 정렬---------
[1, 2, 3, 4, 5]
*/
스트림에서 요소 제한하기
- limit 메서드를 사용하여 스트림에서 요소를 제한할 수 있습니다.
- 예제를 보면 limit 메서드를 사용하여 해당 스트림에서 최대 3개의 요소만 추출한 후, toList 메서드를 사용하여 새로운 List 객체를 생성합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 요소 제한---------");
StreamAPI13 streamAPI13 = new StreamAPI13();
streamAPI13.streamAPI(numList);
}
}
class StreamAPI13 {
public void streamAPI(List<Integer> numList) {
List<Integer> limitElement =
numList.stream()
.limit(3)
.toList();
System.out.println(limitElement);
}
}
/*
출력
---------스트림 요소 제한---------
[1, 2, 3]
*/
스트림에서 요서 건너뛰기
- skip 메서드를 사용하여 스트림에서 요소를 건너뛸 수 있습니다.
- 예제를 보면 skip 메서드를 사용하여 해당 스트림에서 처음 3개의 요소를 건너 뛴 후, 나머지 요소를 추출한 후, toList 메서드를 사용하여 해당 요소를 포함하는 새로운 List 객체를 생성합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 요소 건너뛰기---------");
StreamAPI14 streamAPI14 = new StreamAPI14();
streamAPI14.streamAPI(numList);
}
}
class StreamAPI14 {
public void streamAPI(List<Integer> numList) {
List<Integer> skipElement =
numList.stream()
.skip(3)
.toList();
System.out.println(skipElement);
}
}
/*
출력
---------스트림 요소 건너뛰기---------
[4, 5]
*/
스트림에서 요소 매핑하기
- flatMap 메서드를 사용하여 스트림에서 요소를 매핑할 수 있습니다.
- 예제를 보면 flatMap 메서드를 사용하여 list 리스트에서 각 문자열을 배열로 분할하고, 각 문자를 개별 요소로 만든 후 해당 요소를 포함하는 새로운 스트림을 생성합니다.
- 이후, distinct 메서드를 사용하여 중복 요소를 제거한 후, toList 메서드를 사용하여 새로운 List 객체를 생성합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 요소 매핑---------");
StreamAPI15 streamAPI15 = new StreamAPI15();
streamAPI15.streamAPI(list);
}
}
class StreamAPI15 {
public void streamAPI(List<String> list) {
List<String> mappingElement =
list.stream()
.flatMap(s -> Arrays.stream(s.split("")))
.distinct()
.toList();
System.out.println(mappingElement);
}
}
/*
출력
---------스트림 요소 매핑---------
[j, a, v, s, p, r, i, n, g, B, o, t, q, u, e, y, D, S, L]
*/
스트림에서 요소 집계하기
- summaryStatistics 메서드를 사용하여 스트림에서 요소를 집계할 수 있습니다.
- 예제를 보면 summaryStatistics 메서드를 사용하여 numList 스트림에서 요소의 합, 평균, 최대값, 최소값, 개수 등을 계산한 후, 해당 값을 포함하는 새로운 IntSummaryStatistics 객체를 생성합니다.
- 이후, 해당 객체를 출력합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 요소 집계---------");
StreamAPI16 streamAPI16 = new StreamAPI16();
streamAPI16.streamAPI(numList);
}
}
class StreamAPI16 {
public void streamAPI(List<Integer> numList) {
IntSummaryStatistics aggregationElement =
numList.stream()
.mapToInt((x) -> x)
.summaryStatistics();
System.out.println(aggregationElement);
}
}
/*
출력
---------스트림 요소 집계---------
IntSummaryStatistics{count=5, sum=15, min=1, average=3.000000, max=5}
*/
스트림에서 요소 카운트하기
- count 메서드를 사용하여 스트림에서 요소를 카운트할 수 있습니다.
- 예제를 보면 count 메서드를 사용하여 list 스트림에서 요소의 개수를 계산한 후, 해당 개수를 출력합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 요소 카운트---------");
StreamAPI17 streamAPI17 = new StreamAPI17();
streamAPI17.streamAPI(numList);
}
}
class StreamAPI17 {
public void streamAPI(List<Integer> numList) {
long countStream =
numList.stream()
.count();
System.out.println(countStream);
}
}
/*
출력
---------스트림 요소 카운트---------
5
*/
스트림에서 요소 변환하기
- map 메서드를 사용하여 스트림에서 요소를 변환할 수 있습니다.
- 예제를 보면 map 메서드를 사용하여 list 스트림에서 모든 문자열을 대문자로 변환한 후, 해당 요소를 포함하는 새로운 List 객체를 생성합니다.
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림 요소 변환---------");
StreamAPI18 streamAPI18 = new StreamAPI18();
streamAPI18.streamAPI(list);
}
}
class StreamAPI18 {
public void streamAPI(List<String> list) {
List<String> conversionElement =
list.stream()
.map(String::toUpperCase)
.toList();
System.out.println(conversionElement);
}
}
/*
출력
---------스트림 요소 변환---------
[JAVA, SPRING, SPRINGBOOT, JPA, QUERYDSL]
*/
전체 코드
StreamAPI 작성법
더보기
package streamAPI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public class StreamAPI {
public static void main(String[] args) {
System.out.println("\n---------Collection Stream 생성---------");
CreateStream1 createStream1 = new CreateStream1();
createStream1.createStream();
System.out.println("\n---------Array Stream 생성---------");
CreateStream2 createStream2 = new CreateStream2();
createStream2.createStream();
System.out.println("\n---------Stream.of Stream 생성---------");
CreateStream3 createStream3 = new CreateStream3();
createStream3.createStream();
System.out.println("\n---------filter Stream 중간 연산---------");
IntermediateOperationStream1 intermediateOperationStream1 = new IntermediateOperationStream1();
intermediateOperationStream1.IntermediateOperationStream();
System.out.println("\n---------map Stream 중간 연산---------");
IntermediateOperationStream2 intermediateOperationStream2 = new IntermediateOperationStream2();
intermediateOperationStream2.IntermediateOperationStream();
System.out.println("\n---------flatMap Stream 중간 연산---------");
IntermediateOperationStream3 intermediateOperationStream3 = new IntermediateOperationStream3();
intermediateOperationStream3.IntermediateOperationStream();
System.out.println("\n---------sorted Stream 중간 연산---------");
IntermediateOperationStream4 intermediateOperationStream4 = new IntermediateOperationStream4();
intermediateOperationStream4.IntermediateOperationStream();
System.out.println("\n---------distinct Stream 중간 연산---------");
IntermediateOperationStream5 intermediateOperationStream5 = new IntermediateOperationStream5();
intermediateOperationStream5.IntermediateOperationStream();
System.out.println("\n---------limit Stream 중간 연산---------");
IntermediateOperationStream6 intermediateOperationStream6 = new IntermediateOperationStream6();
intermediateOperationStream6.IntermediateOperationStream();
System.out.println("\n---------skip Stream 중간 연산---------");
IntermediateOperationStream7 intermediateOperationStream7 = new IntermediateOperationStream7();
intermediateOperationStream7.IntermediateOperationStream();
System.out.println("\n---------forEach Stream 최종 연산---------");
FinalOperationStream1 finalOperationStream1 = new FinalOperationStream1();
finalOperationStream1.FinalOperationStream();
System.out.println("\n---------toArray Stream 최종 연산---------");
FinalOperationStream2 finalOperationStream2 = new FinalOperationStream2();
finalOperationStream2.FinalOperationStream();
System.out.println("\n---------reduce Stream 최종 연산---------");
FinalOperationStream3 finalOperationStream3 = new FinalOperationStream3();
finalOperationStream3.FinalOperationStream();
System.out.println("\n---------collect Stream 최종 연산---------");
FinalOperationStream4 finalOperationStream4 = new FinalOperationStream4();
finalOperationStream4.FinalOperationStream();
System.out.println("\n---------count Stream 최종 연산---------");
FinalOperationStream5 finalOperationStream5 = new FinalOperationStream5();
finalOperationStream5.FinalOperationStream();
System.out.println("\n---------anyMatch Stream 최종 연산---------");
FinalOperationStream6 finalOperationStream6 = new FinalOperationStream6();
finalOperationStream6.FinalOperationStream();
System.out.println("\n---------allMatch Stream 최종 연산---------");
FinalOperationStream7 finalOperationStream7 = new FinalOperationStream7();
finalOperationStream7.FinalOperationStream();
System.out.println("\n---------noneMatch Stream 최종 연산---------");
FinalOperationStream8 finalOperationStream8 = new FinalOperationStream8();
finalOperationStream8.FinalOperationStream();
}
}
class CreateStream1 {
public void createStream() {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
}
}
class CreateStream2 {
public void createStream() {
String[] arr = {"java", "spring", "springBoot", "jpa", "queryDSL"};
Stream<String> stream = Arrays.stream(arr);
stream.forEach(System.out::println);
}
}
class CreateStream3 {
public void createStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
stream.forEach(System.out::println);
}
}
class IntermediateOperationStream1 {
public void IntermediateOperationStream() {
System.out.println("filter 조건 : 원소 중 길이 5 이상인 원소 출력");
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> filterStream = stream.filter(str -> str.length() > 5);
filterStream.forEach(System.out::println);
}
}
class IntermediateOperationStream2 {
public void IntermediateOperationStream() {
System.out.println("map 조건 : 각 원소 길이만 출력");
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<Integer> mapStream = stream.map(String::length);
mapStream.forEach(System.out::println);
}
}
class IntermediateOperationStream3 {
public void IntermediateOperationStream() {
System.out.println("flatMap 조건 : 두 Stream을 새롭게 생성하고 하나의 Stream으로 병합");
Stream<List<Integer>> stream = Stream.of(Arrays.asList(1, 2), Arrays.asList(3, 4));
Stream<Integer> flatMapStream = stream.flatMap(Collection::stream);
flatMapStream.forEach(System.out::println);
}
}
class IntermediateOperationStream4 {
public void IntermediateOperationStream() {
System.out.println("sort 조건 : 기본(오름차순) 정렬");
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> sortStream = stream.sorted();
sortStream.forEach(System.out::println);
}
}
class IntermediateOperationStream5 {
public void IntermediateOperationStream() {
System.out.println("distinct 조건 : 중복 요소 제거");
Stream<String> stream = Stream.of("java", "java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> distinctStream = stream.distinct();
distinctStream.forEach(System.out::println);
}
}
class IntermediateOperationStream6 {
public void IntermediateOperationStream() {
System.out.println("limit 조건 : 입력한 파라미터 만큼만 출력");
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> limitStream = stream.limit(3);
limitStream.forEach(System.out::println);
}
}
class IntermediateOperationStream7 {
public void IntermediateOperationStream() {
System.out.println("입력한 파리미터 만큼 건너뛰고 출력");
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
Stream<String> skip = stream.skip(3);
skip.forEach(System.out::println);
}
}
class FinalOperationStream1 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
stream.forEach(System.out::println);
}
}
class FinalOperationStream2 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
String[] toArrayStream = stream.toArray(String[]::new);
System.out.println(Arrays.toString(toArrayStream));
}
}
class FinalOperationStream3 {
public void FinalOperationStream() {
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
int reduceStream = stream.reduce(0, Integer::sum);
System.out.println(reduceStream);
}
}
class FinalOperationStream4 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
List<String> collectStream = stream.toList();
System.out.println(collectStream);
}
}
class FinalOperationStream5 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
long count = stream.count();
System.out.println(count);
}
}
class FinalOperationStream6 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
boolean anyMatchStream = stream.anyMatch(str -> str.startsWith("j"));
System.out.println(anyMatchStream);
}
}
class FinalOperationStream7 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
boolean allMatchStream = stream.allMatch(str -> str.length() > 5);
System.out.println(allMatchStream);
}
}
class FinalOperationStream8 {
public void FinalOperationStream() {
Stream<String> stream = Stream.of("java", "spring", "springBoot", "jpa", "queryDSL");
boolean noneMatchStream = stream.noneMatch(str -> str.startsWith("k"));
System.out.println(noneMatchStream);
}
}
/*
출력
---------Collection Stream 생성---------
java
spring
springBoot
jpa
queryDSL
---------Array Stream 생성---------
java
spring
springBoot
jpa
queryDSL
---------Stream.of Stream 생성---------
java
spring
springBoot
jpa
queryDSL
---------filter Stream 중간 연산---------
filter 조건 : 원소 중 길이 5 이상인 원소 출력
spring
springBoot
queryDSL
---------map Stream 중간 연산---------
map 조건 : 각 원소 길이만 출력
4
6
10
3
8
---------flatMap Stream 중간 연산---------
flatMap 조건 : 두 Stream을 새롭게 생성하고 하나의 Stream으로 병합
1
2
3
4
---------sorted Stream 중간 연산---------
sort 조건 : 기본(오름차순) 정렬
java
jpa
queryDSL
spring
springBoot
---------distinct Stream 중간 연산---------
distinct 조건 : 중복 요소 제거
java
spring
springBoot
jpa
queryDSL
---------limit Stream 중간 연산---------
limit 조건 : 입력한 파라미터 만큼만 출력
java
spring
springBoot
---------skip Stream 중간 연산---------
입력한 파리미터 만큼 건너뛰고 출력
jpa
queryDSL
---------forEach Stream 최종 연산---------
java
spring
springBoot
jpa
queryDSL
---------toArray Stream 최종 연산---------
[java, spring, springBoot, jpa, queryDSL]
---------reduce Stream 최종 연산---------
15
---------collect Stream 최종 연산---------
[java, spring, springBoot, jpa, queryDSL]
---------count Stream 최종 연산---------
5
---------anyMatch Stream 최종 연산---------
true
---------allMatch Stream 최종 연산---------
false
---------noneMatch Stream 최종 연산---------
true
*/
StreamAPI 활용
더보기
package streamAPI;
import java.util.*;
import java.util.stream.Collectors;
public class StreamAPIUtilization {
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "spring", "springBoot", "jpa", "queryDSL");
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("\n---------스트림에서 요소 찾기---------");
StreamAPI1 streamAPI1 = new StreamAPI1();
streamAPI1.streamAPI(list);
System.out.println("\n---------스트림에서 요소 수집---------");
StreamAPI2 streamAPI2 = new StreamAPI2();
streamAPI2.streamAPI(list);
System.out.println("\n---------스트림에서 요소 집계---------");
StreamAPI3 streamAPI3 = new StreamAPI3();
streamAPI3.streamAPI(numList);
System.out.println("\n---------스트림에서 요소 그룹화---------");
StreamAPI4 streamAPI4 = new StreamAPI4();
streamAPI4.streamAPI();
System.out.println("\n---------스트림 병렬 처리---------");
StreamAPI5 streamAPI5 = new StreamAPI5();
streamAPI5.streamAPI(list);
System.out.println("\n---------스트림 Optional 활용---------");
StreamAPI6 streamAPI6 = new StreamAPI6();
streamAPI6.streamAPI();
System.out.println("\n---------스트림 배열 변환---------");
StreamAPI7 streamAPI7 = new StreamAPI7();
streamAPI7.streamAPI(list);
System.out.println("\n---------스트림 모든 요소 처리---------");
StreamAPI8 streamAPI8 = new StreamAPI8();
streamAPI8.streamAPI(list);
System.out.println("\n---------스트림 값 추출---------");
StreamAPI9 streamAPI9 = new StreamAPI9();
streamAPI9.streamAPI(numList);
System.out.println("\n---------스트림 중복 제거---------");
StreamAPI10 streamAPI10 = new StreamAPI10();
streamAPI10.streamAPI();
System.out.println("\n---------스트림 요소 분할---------");
StreamAPI11 streamAPI11 = new StreamAPI11();
streamAPI11.streamAPI(numList);
System.out.println("\n---------스트림 요소 정렬---------");
StreamAPI12 streamAPI12 = new StreamAPI12();
streamAPI12.streamAPI();
System.out.println("\n---------스트림 요소 제한---------");
StreamAPI13 streamAPI13 = new StreamAPI13();
streamAPI13.streamAPI(numList);
System.out.println("\n---------스트림 요소 건너뛰기---------");
StreamAPI14 streamAPI14 = new StreamAPI14();
streamAPI14.streamAPI(numList);
System.out.println("\n---------스트림 요소 매핑---------");
StreamAPI15 streamAPI15 = new StreamAPI15();
streamAPI15.streamAPI(list);
System.out.println("\n---------스트림 요소 집계---------");
StreamAPI16 streamAPI16 = new StreamAPI16();
streamAPI16.streamAPI(numList);
System.out.println("\n---------스트림 요소 카운트---------");
StreamAPI17 streamAPI17 = new StreamAPI17();
streamAPI17.streamAPI(numList);
System.out.println("\n---------스트림 요소 변환---------");
StreamAPI18 streamAPI18 = new StreamAPI18();
streamAPI18.streamAPI(list);
}
}
class StreamAPI1 {
public void streamAPI(List<String> list) {
Optional<String> findElement =
list.stream()
.filter(s -> s.startsWith("j"))
.findFirst();
findElement.ifPresent(System.out::println);
}
}
class StreamAPI2 {
public void streamAPI(List<String> list) {
List<String> collectElement =
list.stream()
.filter(s -> s.startsWith("j"))
.toList();
System.out.println(collectElement);
}
}
class StreamAPI3 {
public void streamAPI(List<Integer> numList) {
int aggregationElement = numList.stream().reduce(0, Integer::sum);
System.out.println(aggregationElement);
}
}
class StreamAPI4 {
public void streamAPI() {
List<Classes> classes = Arrays.asList(
new Classes("Java", 1),
new Classes("Spring", 2),
new Classes("SpringBoot", 3),
new Classes("JPA", 4),
new Classes("QueryDSL", 5));
Map<String, List<Classes>> groupElement = classes.stream().collect(Collectors.groupingBy(Classes::getSubject));
System.out.println(groupElement);
}
}
class Classes {
private final String subject;
private final int period;
public Classes(String subject, int period) {
this.subject = subject;
this.period = period;
}
public String getSubject() {
return subject;
}
public int getPeriod() {
return period;
}
@Override
public String toString() {
return "Classes [subject=" + subject + ", period=" + period + "]";
}
}
class StreamAPI5 {
public void streamAPI(List<String> list) {
long parallel = list.parallelStream().filter(s -> s.startsWith("j")).count();
System.out.println(parallel);
}
}
class StreamAPI6 {
public void streamAPI() {
Optional<String> optional = Optional.of("Java");
if (optional.isPresent()) {
String result = optional.get();
System.out.println(result);
} else {
System.out.println("No Value");
}
}
}
class StreamAPI7 {
public void streamAPI(List<String> list) {
String[] conversionArray = list.toArray(String[]::new);
System.out.println(Arrays.toString(conversionArray));
}
}
class StreamAPI8 {
public void streamAPI(List<String> list) {
list.forEach(System.out::println);
}
}
class StreamAPI9 {
public void streamAPI(List<Integer> numList) {
int valueExtraction =
numList.stream()
.mapToInt(Integer::intValue)
.sum();
System.out.println(valueExtraction);
}
}
class StreamAPI10 {
public void streamAPI() {
List<Integer> arr = Arrays.asList(1, 2, 3, 4, 5, 1);
List<Integer> deduplication =
arr.stream()
.distinct()
.toList();
System.out.println(deduplication);
}
}
class StreamAPI11 {
public void streamAPI(List<Integer> numList) {
Map<Boolean, List<Integer>> splitElements =
numList.stream()
.collect(Collectors.partitioningBy(i -> i % 2 == 0));
System.out.println(splitElements);
}
}
class StreamAPI12 {
public void streamAPI() {
List<Integer> list = Arrays.asList(5, 1, 3, 2, 4);
List<Integer> sortElement =
list.stream()
.sorted()
.toList();
System.out.println(sortElement);
}
}
class StreamAPI13 {
public void streamAPI(List<Integer> numList) {
List<Integer> limitElement =
numList.stream()
.limit(3)
.toList();
System.out.println(limitElement);
}
}
class StreamAPI14 {
public void streamAPI(List<Integer> numList) {
List<Integer> skipElement =
numList.stream()
.skip(3)
.toList();
System.out.println(skipElement);
}
}
class StreamAPI15 {
public void streamAPI(List<String> list) {
List<String> mappingElement =
list.stream()
.flatMap(s -> Arrays.stream(s.split("")))
.distinct()
.toList();
System.out.println(mappingElement);
}
}
class StreamAPI16 {
public void streamAPI(List<Integer> numList) {
IntSummaryStatistics aggregationElement =
numList.stream()
.mapToInt((x) -> x)
.summaryStatistics();
System.out.println(aggregationElement);
}
}
class StreamAPI17 {
public void streamAPI(List<Integer> numList) {
long countStream =
numList.stream()
.count();
System.out.println(countStream);
}
}
class StreamAPI18 {
public void streamAPI(List<String> list) {
List<String> conversionElement =
list.stream()
.map(String::toUpperCase)
.toList();
System.out.println(conversionElement);
}
}
/*
출력
---------스트림에서 요소 찾기---------
java
---------스트림에서 요소 수집---------
[java, jpa]
---------스트림에서 요소 집계---------
15
---------스트림에서 요소 그룹화---------
{Java=[Classes [subject=Java, period=1]], QueryDSL=[Classes [subject=QueryDSL, period=5]], JPA=[Classes [subject=JPA, period=4]], SpringBoot=[Classes [subject=SpringBoot, period=3]], Spring=[Classes [subject=Spring, period=2]]}
---------스트림 병렬 처리---------
2
---------스트림 Optional 활용---------
Java
---------스트림 배열 변환---------
[java, spring, springBoot, jpa, queryDSL]
---------스트림 모든 요소 처리---------
java
spring
springBoot
jpa
queryDSL
---------스트림 값 추출---------
15
---------스트림 중복 제거---------
[1, 2, 3, 4, 5]
---------스트림 요소 분할---------
{false=[1, 3, 5], true=[2, 4]}
---------스트림 요소 정렬---------
[1, 2, 3, 4, 5]
---------스트림 요소 제한---------
[1, 2, 3]
---------스트림 요소 건너뛰기---------
[4, 5]
---------스트림 요소 매핑---------
[j, a, v, s, p, r, i, n, g, B, o, t, q, u, e, y, D, S, L]
---------스트림 요소 집계---------
IntSummaryStatistics{count=5, sum=15, min=1, average=3.000000, max=5}
---------스트림 요소 카운트---------
5
---------스트림 요소 변환---------
[JAVA, SPRING, SPRINGBOOT, JPA, QUERYDSL]
*/