1. 스트림(Stream)
배열, 컬렉션 등의 요소를 하나씩 참조하여 동일한 연산을 반복적으로 수행하는 기능 (클래스)
2. 스트림 생성 및 사용
public class IntArrayTest {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5}; # 정수 배열 선언
int sumVal = Arrays.stream(arr).sum(); # 정수 배열 스트림생성
long count = Arrays.stream(arr).count(); # 정수 배열 스트림 생성
System.out.println(sumVal);
System.out.println(count);
}
}
3. 중간 연산
4. 최종 연산
5. 중간 연산과 최종 연산
sList.stream().filter(s->s.length() >= 5).forEach(s->System.out.println(s));
customerList.stream().map(c->c.getName()).forEach(s->System.out.println(s));
6. 스트림 활용
public class IntArrayStreamTest {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
Arrays.stream(arr).forEach(n->System.out.print(n + "\t")); # 스트림 생성 및 람다식 지정
System.out.println();
int sum = Arrays.stream(arr).sum();
System.out.println("sum: " + sum);
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
int sum2 = list.stream().mapToInt(n->n.intValue()).sum(); # Integer 객체 int형으로 변환
System.out.println(sum2);
}
}
1. reduce() 메서드
T reduce(T identify, BinaryOperator<T> accumulator) # 첫번 째 매개변수 = 초기값
# 두번 째 매개변수 = 람다식
2. 직접 람다식을 지정하는 방식
public class ReduceTest {
public static void main(String[] args) {
String[] greetings = {"안녕하세요~~~", "hello", "Good morning", "반갑습니다^^"};
System.out.println(Arrays.stream(greetings).reduce("", (s1, s2)->
{if (s1.getBytes().length >= s2.getBytes().length) return s1;
else return s2;}));
}
}
3. BinaryOperator를 구현하여 넘기는 방식
class CompareString implements BinaryOperator<String>{ # 함수형 인터페이스를 구현
@Override
public String apply(String s1, String s2) {
if (s1.getBytes().length >= s2.getBytes().length) return s1;
else return s2;
}
}
public class ReduceTest {
public static void main(String[] args) {
String[] greetings = {"안녕하세요~~~", "hello", "Good morning", "반갑습니다^^"};
String str = Arrays.stream(greetings).reduce(new CompareString()).get(); # 함수형 인터페이스를 구현한 클래스를 생성해서 지정해 줌
System.out.println(str);
}
}
4. reduce 메서드 원리
public class ReduceTest {
public static void main(String[] args) {
int[] arr = new int[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
System.out.println(Arrays.stream(arr).reduce(0, (a,b)->{
System.out.println(a);
System.out.println(b);
return a+b;}));
}
}
1
1
2
3
3
6
4
10
5
15