-
[JAVA] JAVA의 Steam API 간단 예시 (람다식, 메서드 참조)Language/Java 2023. 6. 30. 01:26
각 용어 정리
stream()
JAVA 8 부터 추가된 반복자다. 간단하게 컬렉션(ex. List, ArrayList....) 형식을 for문으로 하나씩 반복해서 끝까지 참조하는 메소드다.
stream()으로 시작해서 람다식으로 처리하면 된다.람다식
추상 메서드가 하나뿐일 때 간단하게 표현하는 방법이다.
예를 들어 정렬 방법을 선택할 때 사용한다.
Arrays.sort(arr, new Comparator<int[]>(){ @Override public int compare(int[] o1, int[] o2) { if (o1[1] == o2[1]) { return o1[0] - o2[0]; } return o1[1] - o2[1]; } });
Arrays.sort(arr, (int[] o1, int[] o2) -> { if (o1[1] == o2[1]) { return o1[0] - o2[0]; } return o1[1] - o2[1]; });
위와 같이 new Comparator라는 클래스의 compare 라는 메소드 하나를 사용하기 위할 때
람다식으로 간단하게 표현 할 수 있다.메서드 참조
클래스의 메소드를 간단하게 사용할 수 있게 한다.
매우 간단한 예시를 들자면 정수값인 문자열들을 일일이 Integer 객체로 변환해주기 위해 parseInt를 사용할 때,
이 코드를 단순화 시킬 수 있다.str.stream().map(Integer::parseInt);
위와 같은 코드를 작성하면 str 컬렉션 객체를 map으로 반복하면서 Integer 객체로 변환 가능하다.
예시 코드
package Java; import java.util.*; import java.util.stream.Collectors; class Main { public static void main(String[] args) { ArrayList<Integer> arr = new ArrayList<>(); for (int i = 0; i < 10; i++) { arr.add(i); } // forEach를 통해 리스트 요소의 개수 만큼 반복 arr.stream().forEach(s -> System.out.println(s)); System.out.println("======================="); arr.stream().forEach(System.out::println); System.out.println("======================="); // 리스트의 2로 나눈 나머지 값이 0인 값을 필터링 -> forEach로 반복 -> System.out 의 println 메소드로 출력 arr.stream().filter(s -> s % 2 == 0).forEach(System.out::println); System.out.println("======================="); ArrayList<String> str = new ArrayList<>(); str.add("281"); str.add("182"); str.add("192"); // str의 요소룰 map을 통해 Integer 객체로 변환 -> collect를 통해 List 타입으로 변환 -> forEach를 통해 요소의 개수만큼 반복 // ::의 용도는 Integer 클래스의 메소드를 수행하는 메소드 참조 str.stream().map(Integer::parseInt).collect(Collectors.toList()).forEach(s -> System.out.println(s)); System.out.println("======================="); // 9라는 문자열을 가진 요소를 필터링 -> 출력 str.stream().filter(s -> s.contains("9")).forEach(System.out::println); } }
출력
0 1 2 3 4 5 6 7 8 9 ======================= 0 1 2 3 4 5 6 7 8 9 ======================= 0 2 4 6 8 ======================= 281 182 192 ======================= 192