[Java] Consumer 예제

Consumer

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {		
  // Example 1 : Consumer
  Consumer<String> testFoo = (@NotBlank var testString) -> {
    System.out.println("s : "+testString);
    return;
  };

  testFoo.accept("1"); // "s : 1" 이 출력된다.
}

위 코드에서 testString 타입을 var 로 사용 한 이유는 @NotBlank 어노테이션을 사용 하기 위해서이다.


Primitive Consumer

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {		
  // Example 2 : Primitive Consumer
  // IntConsumer 외에 DoubleConsumer, LongConsumer가 있다.
  IntConsumer intConsumer = n -> { 
    System.out.println(n * 100); 
  };
  intConsumer.accept(5); // 5 * 100 인 "500" 이 출력된다.
  intConsumer.accept(10); // 10 * 100 인 "1000" 이 출력된다.
}


List.forEach()

1
2
3
4
5
6
public static void main(String[] args) {		
  // Example 3 : List.forEach()
  Consumer<String> consumer = s -> System.out.println(s.toUpperCase());
  List<String> fruits = Arrays.asList("apple", "kiwi", "orange");
  fruits.forEach(consumer); 
}


andThen()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args) {		
  // Example 4 : andThen()
  List<String> fruits = Arrays.asList("apple", "kiwi", "orange");
  Consumer<List<String>> addNumber = list -> {
      for (int i = 0; i < list.size(); i++) {
          list.set(i, (i + 1) + ". " + list.get(i));
      }
  };

  Consumer<List<String>> printList = list -> {
      for (String fruit : list) {
          System.out.println(fruit);
      }
  };

  addNumber.andThen(printList).accept(fruits); // fruits 의 요소들이 인덱스와 함께 줄바꿈되어 출력된다.
}
1
2
3
4
5
6
7
8
// 실제로 andThen 은 아래와 같이 구성되어 있다.
public interface Consumer<T> {
  ...
  default Consumer<T> andThen(Consumer<? super T> after) {
      Objects.requireNonNull(after);
      return (T t) -> { accept(t); after.accept(t); };
  }
}


Leave a comment