상세 컨텐츠

본문 제목

[Stream] collect method

기록 - 프로그래밍/Java

by wjjun 2020. 8. 4. 09:47

본문

Mutable reductions

변경 가능한 축소

Collection 또는 배열을 통한 변경이 가능한 컨테이너 객체를 반환합니다.

collect() 메서드를 이용하여 Collection이나 변경이 가능한 컨테이너 객체로 추출하는 방법을 학습하였습니다.


collect()

collect()는 Collector 인스턴스를 사용하며 사용 방법은 아래와 같습니다.

  • Collector 구현체를 만들어 사용
  • Collectors 클래스에서 제공하는 사전에 정의된 구현체 사용

Collectors

Collector 클래스에서는 변경이 가능한 축소 결과를 반환하기 위해 아래의 기능을 제공합니다.

collect() 메서드를 사용하여 아래 작업을 수행할 수 있습니다.

  • toList()

    List에서 스트림 요소를 추출합니다.

  • toSet()

    Set에서 스트림 요소를 추출합니다.

  • toMap()

    key, value로 매핑된 collector를 반환합니다.

  • summingDouble(), summingLong(), summingInt()

    스트림 요소를 Double, Long, Integer 값으로 매핑한 결과로 반환합니다.

  • reducing()

    BinaryOperator 함수를 사용하여 스트림 요소를 축소하여 반환합니다.

  • partitioningBy()

    제공된 Predicate 통해 맵으로 분할합니다.

  • counting()

    스트림 요소 수를 반환합니다.

  • groupingBy()

    제공된 그룹화 기준으로 그룹화된 맵을 생성합니다.

  • mapping()

    수집중인 모든 스트림 요소에 맵핑 작업을 진행합니다.

  • joining()

    스트림 요소를 단일 문자열로 연결합니다.

  • minBy(), maxBy()

    제공된 Comparator 기반의 비교를 통해 최소, 최대 값을 반환합니다.


public class Collections {

  private List<Student> students;
  private List<String> list;
  private List<String> binaryOperatorList;

  @Before
  public void createObject(){
    students = new ArrayList<>();
    students.add(new Student("Jun", 20, "A"));
    students.add(new Student("Min", 30, "A"));
    students.add(new Student("Lee", 24, "B"));
    students.add(new Student("Qoo", 22, "C"));
  }

  @Before
  public void createList(){
    list = new ArrayList<>();
    list.add("A");
    list.add("BB");
    list.add("CCC");
    list.add("BBB");
  }

  @Before
  public void createDuplicateList(){
    binaryOperatorList = new ArrayList<>();
    binaryOperatorList.add("A");
    binaryOperatorList.add("BB");
    binaryOperatorList.add("CCC");
    binaryOperatorList.add("BB");
  }

  @Test
  public void collectToList(){
    List<String> sName = students.stream()
        .map(s -> s.getName())
        .collect(Collectors.toList());
    System.out.println("toList : " + sName);
  }

  @Test
  public void collectToSet(){
    Set<String> sName = students.stream()
        .map(s -> s.getName())
        .collect(Collectors.toSet());
    System.out.println("toSet : " + sName);
  }

  @Test
  public void collectToCollection(){
    LinkedList<String> sName = students.stream()
        .map(s -> s.getName())
        .collect(Collectors.toCollection(LinkedList::new));
    System.out.println("toCollection : " + sName);
  }

  @Test
  public void collectToMap(){
    Map<String, Integer> sMap = list.stream()
        .collect(Collectors.toMap(s -> s, s -> s.length()));
    System.out.println("toMap : " + sMap);
  }

  @Test
  public void collectToMapBinaryOperator(){
    Map<String, Integer> sMap = binaryOperatorList.stream()
        .collect(Collectors.toMap(s -> s, s -> s.length(), (s1, s2) -> s1));
    System.out.println("toMapBinaryOperator : " + sMap);
  }

  @Test
  public void collectToMapOverloaded(){
    Map<String, Integer> sMap = binaryOperatorList.stream()
        .collect(Collectors.toMap(s -> s, s -> s.length(), (s1, s2) -> s1, HashMap::new));
    System.out.println("toMapBinaryOverloaded : " + sMap);
  }
}

---출력결과---
toList : [Jun, Min, Lee, Qoo]
toMapBinaryOperator : {BB=2, A=1, CCC=3}
toCollection : [Jun, Min, Lee, Qoo]
toMapBinaryOverloaded : {BB=2, A=1, CCC=3}
toMap : {BB=2, A=1, CCC=3, BBB=3}
toSet : [Qoo, Jun, Min, Lee]

관련글 더보기

댓글 영역