본문 바로가기
자바

Stream

by 이상한나라의개발자 2023. 12. 12.

Stream API는 객체지향과 함께 사용하면 좋습니다.

대표적으로 for, if -> stream으로 사용할 수 있습니다.

 

대표적인 stream api를 알아보겠습니다.  ( 자세한 stream api 는 별도의 카테코리를 만들어 진행하겠습니다 )

 

Stream API 사용 가능

 

forEach

 

public class ForIterationExampleMain {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();

        integerList.add(10);
        integerList.add(20);
        integerList.add(30);
        integerList.add(40);
        integerList.add(50);
        integerList.add(60);
        integerList.add(70);

        for (int i = 0; i < integerList.size(); i++) {
            System.out.println(integerList.get(i));
        }
    }
}


public class ForEachIterationExampleMain {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();

        integerList.add(10);
        integerList.add(20);
        integerList.add(30);
        integerList.add(40);
        integerList.add(50);
        integerList.add(60);
        integerList.add(70);

        integerList.stream().forEach(integer -> {
            System.out.println(integer);

            if(integer.equals(40)) {
                throw new RuntimeException();
            }
        });
    }
}

 

filter

 

public class FilterExampleMain {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();

        integerList.add(10);
        integerList.add(20);
        integerList.add(30);
        integerList.add(40);
        integerList.add(50);
        integerList.add(60);
        integerList.add(70);

        Integer findNumber = integerList.stream().filter(integer -> {
            System.out.println(integer);

            if(integer.equals(40))
                return true;

            return false;
        }).findAny().get();

        System.out.println("findNumber=" + findNumber);
    }
}

 

 

map ( 수에 * 10 )

 

public class ForMapExampleMain {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();

        integerList.add(10);
        integerList.add(20);
        integerList.add(30);
        integerList.add(40);
        integerList.add(50);
        integerList.add(60);
        integerList.add(70);

        List<Integer> x10IntegerList = new ArrayList<>();

        for (int i = 0; i < integerList.size(); i++) {
            x10IntegerList.add(integerList.get(i) * 10);
        }

        System.out.println(x10IntegerList);
    }
}

 

 

public class MapExampleMain {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();

        integerList.add(10);
        integerList.add(20);
        integerList.add(30);
        integerList.add(40);
        integerList.add(50);
        integerList.add(60);
        integerList.add(70);

        List<Integer> x10IntegerList = integerList.stream()
                .map(integer -> integer * 10)
                .toList();

        System.out.println(x10IntegerList);
    }
}

 

 

filter + map ( 짝수만 뽑아서 * 10 )

 

public class ForAndIfExampleMain {
    public static void main(String[] args) {
        int[] integerArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        List<Integer> integerList = Arrays.stream(integerArray)
                .boxed()
                .toList();

        System.out.println(integerList);

        List<Integer> evenNumberList = new ArrayList<>();

        for(int i = 0; i < integerList.size(); i++) {
            if(integerList.get(i) % 2 == 0) {
                evenNumberList.add(integerList.get(i));
            }
        }

        System.out.println(evenNumberList);

        List<Integer> evenX10NumberList = new ArrayList<>();

        for(int i = 0; i < evenNumberList.size(); i++) {
            evenX10NumberList.add(evenNumberList.get(i) * 10);
        }

        System.out.println(evenX10NumberList);
    }
}

 

public class FilterAndMapExampleMain {

    public static void main(String[] args) {
        List<Integer> integerList = List.of(1,2,3,4,5,6,7,8,9,10);
        System.out.println("integerList = " + integerList);

        List<Integer> result = integerList.stream()
                .filter(number -> number % 2 == 0)
                .map(number -> number * 10)
                .collect(Collectors.toList());

        System.out.println("result = " + result);
    }
}

 

Stream API 와 Map

 

public class MapStream {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>();
        map.put("C", 3);
        map.put("A", 1);
        map.put("B", 2);

        map.keySet().forEach(System.out::println); // 모든 키 출력
        map.values().forEach(System.out::println); // 모든 값 출력

        // 특정 조건에 만족하는 엔트리 (키와 값) 출력하기
        List<Map.Entry<String, Integer>> collect = map.entrySet().stream()
                .filter(entry -> entry.getValue() > 1)
                .collect(Collectors.toList());

        System.out.println("collect = " + collect);

        // 값에 따라 정렬 후 키와 값 출력하기
        map.entrySet().stream()
                .sorted(Map.Entry.comparingByValue())
                .forEach(System.out::println);

        // 키를 기준으로 정렬 후 출력하기
        map.entrySet().stream()
                .sorted(Map.Entry.comparingByKey())
                .forEach(System.out::println);

        // 스트림을 이용하여 새로운 HashMap 만들기
        Map<String, Integer> newMap = map.entrySet().stream()
                .filter(entry -> entry.getValue() > 1)
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

        System.out.println("newMap = " + newMap);
    }
}

 

'자바' 카테고리의 다른 글

자바 메모리 구조  (0) 2023.12.13
Stream & Optional & Parallel Stream  (0) 2023.12.12
슬기롭게 주석 사용하기  (0) 2023.12.12
순회 하면서 컬렉션 수정하지 않기  (0) 2023.12.12
SOLID  (0) 2023.12.12