์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ComputerScience
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- K๋ฐฐํฐ๋ฆฌ
- ๋ผํ๋ผ์ค์๋ง๋
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ์๋ฐ
- Python
- ์ฅํธ์์ค
- JavaScript
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- Java
- ์๋ฐ์คํฌ๋ฆฝํธ
- html
- ๊ฐ๋ฐ
- ํ์ด์ฌ
- css
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์ปดํจํฐ๊ณผํ
- ์ํ
- database
- ํ๋ก๊ทธ๋๋ฐ
- ์ฑ
- ๋ฐ์ํ
- ๊นํ๋จ
- ๋ ์
- ์ค๋ผํด
- ์ฝ๋ฉ
- ๊น๋ฏธ๊ฒฝ
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- Today
- Total
JiYoung Dev ๐ฅ
[JAVA] ์คํธ๋ฆผ(Stream) ๋ณธ๋ฌธ
- Java 8๋ถํฐ ์ง์ ์์
- ์ปฌ๋ ์ ์ ์ ์ฅ๋์ด ์๋ ์๋ฆฌ๋จผํธ๋ค์ ํ๋์ฉ ์ํํ๋ฉด์ ์ฒ๋ฆฌํ ์ ์๋ ์ฝ๋ ํจํด
- ** ์ปฌ๋ ์ : ๋ฐ์ดํฐ์ ์งํฉ, ๊ทธ๋ฃน (ex. List, Set, Queue, Map ๋ฑ)
- ๋๋ค์๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ์ปฌ๋ ์ ์ ๋ค์ด์๋ ๋ฐ์ดํฐ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํํ ๊ฐ๋ฅ
- (๊ธฐ์กด for ๋๋ foreach๋ฌธ ์ฌ์ฉ)
1. ์์ฑํ๊ธฐ : ์คํธ๋ฆผ ์ธ์คํด์ค ์์ฑ
1.1. ๋ฐฐ์ด ์คํธ๋ฆผ : Arrays.stream(๋ฐฐ์ด)
์ ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด array์ ์ ์ n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋,
array์ n์ด ๋ช ๊ฐ ์๋์ง๋ฅผ returnํ๋๋ก!
import java.util.Arrays;
class Solution {
public int solution(int[] array, int n) {
int answer = 0;
answer = (int)Arrays.stream(array).filter(x -> x==n).count();
return answer;
}
}
1.2. ์ปฌ๋ ์ ์คํธ๋ฆผ : Collection.stream()
1.3. Stream.builder() : Stream.<์๋ฃํ>builder()
.add๋ฅผ ํตํด ์ง์ ์ ์ผ๋ก ์ํ๋ ๊ฐ์ ๋ฃ์ ์ ์์
1.4. Stream.generate() : Stream.generate(()->).limit()
generate ์์ ๋๋ค๋ก ๊ฐ์ ๋ฃ์ ์ ์์
์ด ๋ ์์ฑ๋๋ ์คํธ๋ฆผ์ ํฌ๊ธฐ๊ฐ ์ ํด์ ธ ์์ง ์๊ณ ๋ฌดํํ๊ธฐ ๋๋ฌธ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ ํํด์ผ ํจ
1.5. Stream.iterate() : Stream.iterate(์ด๊ธฐ๊ฐ, n->n+2).limit()
์ด๊ธฐ๊ฐ๊ณผ ํด๋น๊ฐ์ ๋ค๋ฃจ๋ ๋๋ค๋ฅผ ์ด์ฉํด ์คํธ๋ฆผ์ ๋ค์ด๊ฐ ์์๋ฅผ ๋ง๋ฆ
1.6. ๊ธฐ๋ณธ ํ์ ํ ์คํธ๋ฆผ : IntStream.range(), LongStream.range() ...
2. ๊ฐ๊ณตํ๊ธฐ : ํํฐ๋ง(filtering), ๋งตํ(mapping) ๋ฑ
2.1. Filtering
์คํธ๋ฆผ ๋ด ์์๋ค์ ํ๋์ฉ ํ๊ฐํด์ ๊ฑธ๋ฌ๋ด๋ ์์
Stream<String> stream =
names.stream()
.filter(name -> name.contains("a"));
// [Elena, Java]
class Solution {
public String solution(String s) {
String answer = "";
List<Integer> upper = s.chars().filter(item -> item <= 90).boxed().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
List<Integer> lower = s.chars().filter(item -> item > 90).boxed().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
for(int item : lower) {
answer += (char)item;
}
for(int item : upper) {
answer += (char)item;
}
return answer;
}
}
2.2. Mapping
์คํธ๋ฆผ ๋ด ์์๋ค์ ํ๋์ฉ ํน์ ๊ฐ์ผ๋ก ๋ณํ
Stream<String> stream =
names.stream()
.map(String::toUpperCase);
// [ERIC, ELENA, JAVA]
2.3. Sorting
List<String> lang =
Arrays.asList("Java", "Scala", "Groovy", "Python", "Go", "Swift");
lang.stream()
.sorted()
.collect(Collectors.toList());
// [Go, Groovy, Java, Python, Scala, Swift]
lang.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
// [Swift, Scala, Python, Java, Groovy, Go]
class Solution {
public long solution(long n) {
long answer = 0;
List<Long> list = new ArrayList<Long>();
while(n>0) {
list.add(n%10);
n /= 10;
}
list = list.stream().sorted().collect(Collectors.toList());
list.stream().forEach(System.out::println);
int mul = 1;
for(long item : list) {
answer += item * mul;
mul *= 10;
}
return answer;
}
}
์ญ์ ์ ๋ ฌ์์๋
list = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
2.4. Iterating
์คํธ๋ฆผ ๋ด ์์๋ค ๊ฐ๊ฐ์ ๋ํ ํน์ ์์ ์ ์ํ
๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น์ง ์์ → ์ค๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด ๋ณผ ๋ ์ฌ์ฉ ๊ฐ๋ฅ
int sum = IntStream.of(1, 3, 5, 7, 9)
.peek(System.out::println)
.sum();
3. ๊ฒฐ๊ณผ๋ง๋ค๊ธฐ
3.1. Calculating : count(), sum(), min(), max(), average()
์ต์, ์ต๋, ํฉ, ํ๊ท ๋ฑ ๊ธฐ๋ณธํ ํ์ ์ผ๋ก ๊ฒฐ๊ณผ ์ ๊ณต
3.2. Reduction
3.3. Collecting
Collector ํ์ ์ ์ธ์๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌ
- toList() : ์์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์คํธ๋ก ๋ฐํ
- joining() : ์์ ํ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ์คํธ๋ง์ผ๋ก ์ด์ด ๋ถ์
์ฝ๋ํด์
public List<OrdersResDto> findAllOrders() {
List<Orders> orders = ordersJpaRepository.findAll();
if (orders == null || orders.isEmpty()) {
throw new IllegalArgumentException("์กฐํ๋ ์ฃผ๋ฌธ ์ ๋ณด๊ฐ ์์ต๋๋ค");
}
List<OrdersResDto> result = orders.stream().map(obj -> new OrdersResDto(obj)).collect(Collectors.toList());
return result;
}
List ํ์ ์ orders์ ๊ฐ ์๋ฆฌ๋ฉํธ๋ฅผ ๊บผ๋ด์ (obj) OrdersResDto๋ก ๋ณํ ํ Stream์ ๊ฒฐ๊ณผ๋ฅผ List ํ์ ์ผ๋ก ๋ฆฌํด
์ฐธ๊ณ ์๋ฃ
1. https://futurecreator.github.io/2018/08/26/java-8-streams/
2. https://hbase.tistory.com/171
'Question' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ์ ๊ณฑ๊ทผ ๊ตฌํ๊ธฐ (Math) (0) | 2023.08.08 |
---|---|
[JAVA] long ํ์ ์์ String ํ์ ์ผ๋ก ๋ณํํ๊ธฐ (0) | 2023.08.07 |
[Java] ๋ฌธ์์ด์์ ๋ฐฐ์ด๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ (0) | 2023.07.28 |
[HTML] <form>ํ๊ทธ enctype ์์ฑ (0) | 2023.06.12 |
[HTML] HTML input ํ๊ทธ ์์ฑ id, name ์ฐจ์ด (0) | 2023.06.01 |