본문 바로가기
  • Welcome J-Kyu Tstory
국비교육과정/JAVA

★Stream 중요코드

by regularity 2022. 3. 16.
728x90

▶Stream의 메서드 사용 내용

package com.test.lamda;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;

public class StreamExam {	//(Collection)어제꺼 복습 flat press

	public static void main(String[] args) {

		String[] nameArray = { "KIM", "CHOI", "HWANG", "LEE", "PARK" };
		List<String> nameList = Arrays.asList(nameArray);	//asList()를 사용해서 객체를 만들떄 새로운 배열 객체를 만드는 것이 아니라 , 원본 배열의 주소값을 참조,내용을 수정하면 원본 배열도 함께 바뀜
		System.out.println("\n");

		System.out.println("=========================================");
		Arrays.sort(nameArray);
		Collections.sort(nameList);	//Collections는 클래스->Collection인터페이스를 상속(그래서 sort()메서드 사용가능)
		
		for(String str1 : nameArray) { 
			System.out.println(str1);
		}
			
		System.out.println("=========================================");
		for (String str2 : nameList) { // List
			System.out.println(str2);
		}
		//Stream객체 사용  //사용법만 다르지 Stream 두 형태는 같음
		Stream<String> arrayStream = Arrays.stream(nameArray);	//컬렉션 객체에서 stream()메소드를 호출하면 스트림 객체 생성 가능 //Arrays클래스를 불러서 사용(클래스화 시켜서 사용하는게 편리)/스트림객체생성
		Stream<String> nameStream = nameList.stream(); //★
		
		
		//스트림 API사용하여 출력
		arrayStream.sorted().forEach(System.out::println);//★
		
		System.out.println("=========================================");
		nameStream.sorted().forEach(System.out::println); // 스트림이 가지고 있는 메서드 호출 /매개변수의 데이터 타입(wrapper class) ::메소드
		
		//long count = nameStream.count();	//오류가 발생->Stream은 1회용이기 떄문에 다시 호출하면 에러남
		
		//Stream API의 3단계 과정
		//1.생성 --> Stream 객체 생성
		//2.가공 --> 원본의 데이터를 별도의 데이터로 가공
		//  * Stream API : 원본 데이터를 변경하지 않는다
		//	* 연산 결과가 Stream으로 반환되어 연속해서 중간 연산을 이어간다.
		//3. 결과 만들기
		//	*	재활용이 불가
		
		List<String> myList = Arrays.asList("b2", "a2", "b1", "a1","c1","c1");
		
		Stream<String> MyList = Stream.of(new String[]{"a1", "a2", "b1", "b2","c1","c1"}); 
		
		//Filter : Stream 에서 조건에 맞는 데이터만을 가공해서 특정 목적에 맞는 데이터셋을 구성
		//구성하여 컬렉션을 만들어 낸다
		Stream<String> stream= nameList.stream()
									.filter(name -> name.contains("b")); //★ //스트림내 요소에 대해서 필터링 하는 작업 //contains("b")->List안에 같은 값이 있으면 true,없으면false를 리턴같은값이라는 의미는 List안에 들어있는 객체의 equals()메소드에 정의됨//filter() ->원하는 기준으로 요소를 걸러내는 역할을 함 여기서 원하는 기준은 Predicate 형태를 매개값으로 주면 됩니다. 그러면 Predicate가 true를 리턴하는 요소만 필터링하는 방식으로 작동합니다.
		//distinct() ->중복을 제거
		
		System.out.println("=========================================");
		//map : 기존 stream 클래스가 가지고 있는 값을 변환하여 새로운 Stream을 
		//형성하는 연산
		Stream<String> stream1 = myList.stream()
				.map(s -> s.toUpperCase());	//toUpperCase() ,toLowerCase() ->대상문자열을 모두 대문자/소문자로 변환해줌
		//distinct : 중복된 데이터 요소 제거하고 불러옴
		stream1.forEach(System.out::println);
		
		System.out.println("=========================================");
		myList
			.stream()	//Stream생성
			.filter(s ->s.startsWith("c"))	//filter->SQL에서 ->LIKE같은 역할 (startWhite시작 부분->특정 문자를 찾아줌)->boolean 타입으로 반환
			.map(String::toUpperCase)
			.sorted()
			.count();	//count()-> 최종처리 메서드(데이터 개수)
//			.foreach();  //-> foreach()는 최종 연산 (요소들을 계속해서 반복해서 가져와라라는 의미)	
		
		/*
		 
		(중간 처리 메소드)
		필터링	dinstict(), filter()
		자르기	skip(), limit()
		정렬		sorted()
		매핑		flatMap(), flatMapToP(), map(), mapToP(), asDoubleStream(), asLongStream()
		조회		peek()
		  
		 (stream최종 연산 메서드)
		루핑	forEach()
		매칭	allMatch(), anyMatch(), noneMatch()
		집계	count(), max(), min(), average(), sum(), reduce()
		조사	findFirst(), findAny()
		수집	collect()
		*/
	}// 메인메서드 끝
}//소스파일 끝
728x90

'국비교육과정 > JAVA' 카테고리의 다른 글

[JDBC] MariaDB-연결-Java  (0) 2022.03.17
★JFrame활용 코드  (0) 2022.03.17
★JDBCConnection 코드  (0) 2022.03.17
9일차  (0) 2022.03.17
★Lamda 중요코드  (0) 2022.03.16

댓글