GDJ 9/21

Yongha Hwang·2023년 9월 21일
0

Stream API

Array 나 Collection Framework 의 데이터를 쉽고 빠르게 처리 할 수 있다.

  • 원본 데이터를 변경하지 않는다.
  • 일회용이다.
  • 내부 반복으로 작업을 처리 한다.
  • 병렬처리가 가능하다.

1. 생성

2. 가공

일련의 가공과정을 거쳐 새로운 데이터를 만들어 낸다.

	// 1.filter 는 해당 스트림 안에 조건을 만족하는 값만 따로 담아낸다.
			list.stream().filter(new Predicate<String>() {
			// Predicate<T> - 매개변수를 통해 Boolean 을 반환
			@Override
			public boolean test(String t) {				
				return t.contains("java");
			}
            
	 // 2. map 은 stream 안의 값을 받아서 가공할때 사용 한다.
	// input -> map -> 가공된 output           files.stream().map(new Function<File,String>() {
			@Override
			public String apply(File f) {
				return f.getName();
			}
            
    // 3. 중복 제거 : DB의 distinct() 와 같다.
    Object[] obj = list.stream().distinct().toArray();
    
    // 4. peek 은 데이터에 영향을 주지 않는다.
	// forEach 처럼 테스트로 로그를 볼때 활용
	// 차이점은 forEach 는 최종적으로, peek은 중간에 확인이 가능하다는 점이다.
    IntStream.rangeClosed(1, 10).peek(new IntConsumer() {			
			@Override
			public void accept(int value) {
				System.out.println(value);
				
			}
		}).sum();
        
     // 5. Collection 이나 Arrays 에서 사용하는 정렬과 비슷하다.   
     Object[] arr=list.stream().map(new Function<String, String>() {
			@Override
			public String apply(String t) {				
				return t.toUpperCase();
			}
		}).sorted().toArray();
        
        // 6.mapToXXX
        // 일반 스트림과 원시스트림(int,long,double 등의 원시타입을 갖는 스트림) 간의 변경
        int[] result =list.stream().mapToInt(new ToIntFunction<String>() {
			@Override
			public int applyAsInt(String value) {
				return Integer.parseInt(value);
			}
		}).toArray();

3. 결과 만들기

가공을 통해 만들어진 결과에 대해 최종 데이터를 구해 낼 수 있다.

  • Collect() : List, Set, Map 등으로 변환해 주는 메서드
    // 어떤 형태로 변환할 것인지 Collectors 클래스를 통해 지정
    // 원하는 형태가 아니면 Collector 인터페이스를 통해 직접 구현
    // List 는 클래스타입의 데이터타입만 받는다. 제너릭유의 (<>)
		// int -> Integer (Boxing) / Integer -> int (un Boxing)
		List<Integer> intList =Arrays.stream(intArr).boxed().collect(Collectors.toList());
  • Join
    //Collectors.joining(delimiter, prefix, suffix)
    // delimiter : 구분자 / prefix : 앞에붙는것 / suffix : 뒤에붙는것
    // prefix, suffix 는 생략 가능
    String join = Arrays.stream(stringArr).collect(Collectors.joining("/"));

- __GroupBy__
// Collectors.groupingBy() : Stream 에서 작업한 결과를 특정 기준으로 그룹화 해 준다.

```java
Map<String, List<Info>> group =infoList.stream().collect(Collectors.groupingBy(new Function<Info, String>() {	  
		  @Override public String apply(Info t) { return t.getCity(); } }));
		 System.out.println(group); for (String key : group.keySet()) { for (Info info		  : group.get(key)) {
		  System.out.println(key+" : +info.getName()+"("+info.getAge()+")"); } }
		 
  • Partition
    // Collectors.partitioningBy() : 조건 (true | false) 에 따라 분류
// 30대 이상인 부류와 아닌 부류
Map<Boolean, List<Info>> partition =
  infoList.stream().collect(Collectors.partitioningBy(new Predicate<Info>() {
  
 @Override public boolean test(Info t) { return t.getAge()>=30; } }));
  System.out.println(partition);
 
  for (
Boolean key:partition.keySet())
{ for (Info info : partition.get(key))
  {
  System.out.println("30대 이상 여부 : "+key+" "+info.getAge()+" : "+info.getName())
  ; } }

0개의 댓글

관련 채용 정보