본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

스트림의 연산 - 중간연산 distinct, filter, limit, skip, peek sorted map mapToDouble mapToInt mapToLong flatMap flatmapToDouble flatToInt flatToLong

앞서 스트림과 스트림의 연산에 대해 알아봤다.

데이터를 다듬는 스트림 중간연산의 종류에 대해 알아보자.

https://standout.tistory.com/1445

 

스트림의연산, 중간 연산과 최종연산

스트림 데이터의 흐름 스트림은 자바에서 데이터 컬렉션을 처리하는 데 사용되는 개념 중간 연산과 최종 연산을 통해 데이터를 처리 https://standout.tistory.com/106 스트림이란? Stream 개울, 흘러가는

standout.tistory.com

 

 

 


distinct
중복된 요소를 제거

import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("apple", "banana", "apple", "cherry", "banana");
        stream.distinct().forEach(System.out::println);
    }
}
[출력결과]
apple
banana
cherry

 

 

 

filter
주어진 조건에 맞는 요소만 필터링

import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
        stream.filter(x -> x % 2 == 0).forEach(System.out::println);
    }
}
[출력결과]
2
4

 

 

 

limit
스트림에서 처음 나오는 n개의 요소를 제한

import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.iterate(1, n -> n + 1);
        stream.limit(5).forEach(System.out::println);
    }
}
[출력결과]
1
2
3
4
5

 

 

 

skip
처음 n개의 요소를 건너뛴 후, 나머지 요소를 반환


import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.iterate(1, n -> n + 1);
        stream.skip(3).forEach(System.out::println);
    }
}
[출력결과]
4
5
6
...

 

 

 

peek
각 요소를 소비하되, 소비된 요소를 변경하지 않고 확인할 수 있는 기능을 제공

import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
        stream.peek(System.out::println).count();
    }
}
[출력결과]
1
2
3
4
5

 

 

 

sorted
요소를 정렬

import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(3, 1, 4, 1, 5, 9, 2, 6);
        stream.sorted().forEach(System.out::println);
    }
}
[출력결과]
1
1
2
3
4
5
6
9

 

 


map
각 요소를 주어진 함수에 매핑

import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("apple", "banana", "cherry");
        stream.map(String::toUpperCase).forEach(System.out::println);
    }
}
[출력결과]
APPLE
BANANA
CHERRY

 

 

 


mapToDouble
요소를 double로 매핑하는 중간 연산

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // 각 요소를 double로 변환하여 출력
        numbers.stream()
               .mapToDouble(x -> x * 1.5)
               .forEach(System.out::println);
    }
}


[출력결과]
1.5
3.0
4.5
6.0
7.5

 

 

 

 

mapToInt
요소를 int로 매핑하는 중간 연산

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Double> numbers = Arrays.asList(1.5, 2.5, 3.5, 4.5, 5.5);

        // 각 요소를 int로 변환하여 출력
        numbers.stream()
               .mapToInt(Double::intValue)
               .forEach(System.out::println);
    }
}


[출력결과]
1
2
3
4
5

 

 

 


mapToLong
요소를 long으로 매핑하는 중간 연산

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // 각 요소를 long으로 변환하여 출력
        numbers.stream()
               .mapToLong(x -> x * 1000L)
               .forEach(System.out::println);
    }
}


[출력결과]
1000
2000
3000
4000
5000

 

 

 


flatMap
각 요소를 스트림으로 매핑하고, 모든 스트림을 하나의 스트림으로 연결하는 중간 연산

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        List<List<String>> words = Arrays.asList(
                Arrays.asList("Hello", "World"),
                Arrays.asList("Stream", "API"),
                Arrays.asList("Java", "Programming")
        );

        // 각 요소를 스트림으로 변환하고 모두 하나의 스트림으로 연결하여 출력
        words.stream()
             .flatMap(List::stream)
             .forEach(System.out::println);
    }
}


[출력결과]
Hello
World
Stream
API
Programming

 

 

 


flatMapToDouble
각 요소를 double 스트림으로 매핑하고, 모든 double 스트림을 하나의 double 스트림으로 연결하는 중간 연산


import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<List<Double>> numbers = Arrays.asList(
                Arrays.asList(1.1, 2.2, 3.3),
                Arrays.asList(4.4, 5.5),
                Arrays.asList(6.6, 7.7, 8.8, 9.9)
        );

        // 각 요소를 double 스트림으로 매핑하고 모든 스트림을 하나의 double 스트림으로 연결하여 출력
        numbers.stream()
               .flatMapToDouble(list -> list.stream().mapToDouble(Double::doubleValue))
               .forEach(System.out::println);
    }
}


[출력결과]
1.1
2.2
3.3
4.4
5.5
6.6
7.7
8.8
9.9

 

 

 

 

flatMapToInt
각 요소를 int 스트림으로 매핑하고, 모든 int 스트림을 하나의 int 스트림으로 연결하는 중간 연산

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<List<Integer>> numbers = Arrays.asList(
                Arrays.asList(1, 2, 3),
                Arrays.asList(4, 5),
                Arrays.asList(6, 7, 8, 9)
        );

        // 각 요소를 int 스트림으로 매핑하고 모든 스트림을 하나의 int 스트림으로 연결하여 출력
        numbers.stream()
               .flatMapToInt(list -> list.stream().mapToInt(Integer::intValue))
               .forEach(System.out::println);
    }
}


[출력결과]
1
2
3
4
5
6
7
8
9

 

 

 

 

flatMapToLong
각 요소를 long 스트림으로 매핑하고, 모든 long 스트림을 하나의 long 스트림으로 연결하는 중간 연산

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<List<Long>> numbers = Arrays.asList(
                Arrays.asList(100L, 200L, 300L),
                Arrays.asList(400L, 500L),
                Arrays.asList(600L, 700L, 800L, 900L)
        );

        // 각 요소를 long 스트림으로 매핑하고 모든 스트림을 하나의 long 스트림으로 연결하여 출력
        numbers.stream()
               .flatMapToLong(list -> list.stream().mapToLong(Long::longValue))
               .forEach(System.out::println);
    }
}
```

[출력결과]
100
200
300
400
500
600
700
800
900