1. 필터링 프레디케이트로 필터링 스트림 인터페이스는 filter 메서드를 지원한다. filter 메서드는 플레디케이트(불리언을 반환하는 함수)를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); // 채식 요리인지 확인하는 메서드 참조 고유 요소 필터링 스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드도 지원한다. 리스트의 모든 짝수를 선택하고 중복을 필터링한다. List numbers = Arrays.List(1, 2, 1, 3, 3, 2, 4); numbers.stream() .filter(i -> i..
1. 스트림이란 무엇인가? 데이터 컬렉션 반복을 멋지게 처리하는 기능 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. 다음 예제는 저칼로리의 요리명을 반환하고, 칼로리를 기준으로 요리를 정렬하는 자바 7 코드 기존 코드 List lowCaloricDishes = new ArrayList(); for (Dish d : dishes) { if (d.getCalories() < 400) { lowCaloricDishes.add(d); } } List lowCaloricDishesName = new ArrayList(); Collections.sort(lowCaloricDishes, new Comparator() { // 익명 클래스로 요리 정렬 @Override public int..
1. 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다의 특징 익명: 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 구현해야 할 코드에 대한 걱정거리가 줄어든다. 함수: 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 전달: 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성: 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 람다의 구성 // 기존 코드 Comparator byWeight = new Comparator() { @Override public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWe..