sList.stream().filter(s->s.length()>=5).forEach(s->System.out.println(s));
filter()는 중간연산, forEach()는 최종연산임
customerList.stream().map(c->c.getName)).forEach(s->System.out.println(s));
map()은 중간 연산, forEach()는 최종연산
T reduce(T identity, BinaryOperator<T> accumulator)
identity : 기본값
accumulator : 람다식을 쓸수도있다, BinaryOperator를 구현한 class를 쓸수 있다.
Arrays.stream(arr).reduce(0,(a,b)->a+b));
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","Bonjour","Good morning","반갑습니다."};
//-reduce 람다식으로 설정한 예제
System.out.println(Arrays.stream(greetings).reduce("",(s1,s2)->{
if(s1.getBytes().length>=s2.getBytes().length) return s1;
else return s2;
}));
//-reduce()에서 람다식이 길어졌을 경우 클래스로 만들어서 BinaryOperator를 구현한예
System.out.println(Arrays.stream(greetings).reduce(new CompareString()).get());
}
}
여행사에 패키지 여행 상품이 있습니다. 여행 비용은 15세 이상은 100만원, 그 미만은 50만원 입니다.
고객 세 명이 패키지 여행을 떠난다고 했을 때 비용 계산과 고객 명단 검색등에 대한 연산을 스트림을 활용하여 구현해 봅니다.
고객에 대한 클래스를 만들고 ArrayList로 고객을 관리 합니다.
고객 정보는 다음과 같습니다.
CustomerLee
이름 : 이순신
나이 : 40
비용 : 100
CustomerKim
이름 : 김유신
나이 : 20
비용 : 100
CustomerHong
이름 : 홍길동
나이 :13
비용 : 50
public class TravelCustomerTest {
public static void main(String[] args) {
TravelCustomer customerLee = new TravelCustomer("이순신", 40, 100);
TravelCustomer customerKim = new TravelCustomer("김유신", 20, 100);
TravelCustomer customerHong = new TravelCustomer("홍길동", 13, 50);
ArrayList<TravelCustomer> list = new ArrayList<>();
list.add(customerLee);
list.add(customerKim);
list.add(customerHong);
System.out.println("고객 명단 출력");
list.stream().map(c -> c.getName()).forEach(s -> System.out.println(s));
System.out.println("\n여행 비용");
System.out.println(list.stream().mapToInt(c -> c.getPrice()).sum());
System.out.println("나이가 20살 이상인 사람만 고객 이름 정렬");
list.stream().filter(c -> c.getAge() >= 20).map(c -> c.getName()).sorted().forEach(s -> System.out.println(s));
}
}