[TIL] 8/5 데브코스 W1D4

.·2021년 8월 6일
0

자바 Collection 이야기

1. Collection

  • 데이터의 묶음
CollectionListArrayList
추상체<->구상체
  • method chaining: ~().~().~();메소드가 .으로 계속 연결되는 방식

2. Iterator

  • 데이터 묶음을 풀어서 하나씩 처리할 수 있는 수단 제공

  • 각 데이터 한 건마다 map(), filter(), foreach() 등을 할 순 없음.

  • 다음 데이터와 데이터의 끝을 알 수 있다. 역방향으로는 불가

  • 예제

    List<String> list = new ArrayList<>(Arrays.asList("A","AB","ABC","ABCD"));
    Iterator<String> iter = list.iterator();
    
    while (iter.hasNext()) {
        System.out.println(iter.next());
    }

3. Stream

  • 데이터의 연속
  • Collections.stream() : 컬렉션 안의 데이터를 연속된 흐름으로서 취급
  • 연속된 데이터를 한 건씩 필요한 시점까지만 처리 -> 효율적
    • 각 데이터마다 고차함수(함수를 인자로 받는 함수)를 적용 가능
  • 예제

    Stream<Integer> s = Arrays.asList(1, 2, 3).stream();
    int[] arr = s
        .filter(i -> i > 3)
        .mapToInt(i -> i)
        .toArray();
    
  • map() : Object -> Object / mapToInt() : Object -> primitive / boxed() : primitive -> Object
  • 재사용이 안 된다.

4. Optional

  • 자바는 거의 레퍼런스 -> 거의 null이 될 수 있다. -> 항상 null을 확인해야 한다. -> 쓰지 말자 => 계약 기반 프로그래밍(약속)
  • null을 사용하지 않는 방법
    1. EMPTY 객체
    2. Optional : null일 수도 있고 아닐 수도 있는 객체를 wrapping해서 운반
  • 운반체 = 바구니에 담아서 준다
    • 바구니가 비었으면 null
    • 채워져있으면 꺼내서 사용
  • 안전하다.
  • 예제

    Optional<User> optionalUser = Optional.empty();	// null
    optionalUser = Optional.of(new User());	// not null
    
    optionalUser.ifPresentOrElse(user1 -> {
        // do something when it is present
    }, () -> {
        // do something else when it is empty
    });

0개의 댓글