본문 바로가기

# 02/Java

[윤성우 열혈자바] 29-2. 필터링과 맵핑

반응형

필터링


필터링: 스트림을 구성하는 데이터  일부를 조건에 따라 걸러내는 연산


  Stream<T> filter(Predicate<? super T> predicate)     // Stream<T> 존재 

      // Predicate<T> boolean test(T t)


public static void main(String[] args) {

   int[] ar = {1, 2, 3, 4, 5};

   Arrays.stream(ar)   // 배열 기반 스트림 생성

         .filter(n -> n%2 == 1)   // 홀수만 통과시킨다.

         .forEach(n -> System.out.print(n + "\t"));

   System.out.println();

 

   List<String> sl = Arrays.asList("Toy", "Robot", "Box");

   sl.stream()   // 컬렉션 인스턴스 기반 스트림 생성

     .filter(s -> s.length() == 3)   // 길이가 3이면 통과시킨다.

     .forEach(s -> System.out.print(s + "\t"));

   System.out.println();

}


1     3     5

Toy  Box








맵핑1


 "Box", "Robot", "Simple"⇨ 3, 5, 6 


public static void main(String[] args) {

   List<String> ls = Arrays.asList("Box", "Robot", "Simple");

   ls.stream()

     .map(s -> s.length())

     .forEach(n -> System.out.print(n + "\t"));

   System.out.println();

}



<R> Stream<R> map(Function<? super T, ? extends R> mapper)

     // Function<T, R>             R apply(T t)


3    5    6








맵핑 1 : map 친구들


IntStream mapToInt(ToIntFunction<? super T> mapper)

LongStream mapToLong(ToLongFunction<? super T> mapper)

DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper)


public static void main(String[] args) {

   List<String> ls = Arrays.asList("Box", "Robot", "Simple");

   

   ls.stream()

     .mapToInt(s -> s.length())

     .forEach(n -> System.out.print(n + "\t"));

   System.out.println();

}


3    5    6








맵핑 2 : 필터링  맵핑의 


class ToyPriceInfo {    // 장난감 모델  가격 정보

   private String model;    // 모델 

   private int price;    // 가격

 

   public ToyPriceInfo(String m, int p) {

      model = m;

      price = p;

   }

   public int getPrice() {

      return price;

   }

}

public static void main(String[] args) {

   List<ToyPriceInfo> ls = new ArrayList<>();

   ls.add(new ToyPriceInfo("GUN_LR_45", 200));

   ls.add(new ToyPriceInfo("TEDDY_BEAR_S_014", 350));

   ls.add(new ToyPriceInfo("CAR_TRANSFORM_VER_7719", 550));

 

   int sum = ls.stream()

               .filter(p -> p.getPrice() < 500)

               .mapToInt(t -> t.getPrice())

               .sum();

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

}


sum = 550



반응형