스퐁지송 개발노트

22.12.05(월) 스트림 가공 본문

JAVA 입문 시작

22.12.05(월) 스트림 가공

강준석 2022. 12. 5. 17:00
728x90

중복제거,원하는것만 출력

.distinct : 중복제거

.filter(조건문) : 필터처리(원하는 부분만 뽑아서 출력)

 

package 스트림;

import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;

public class Sample06 {

	public static void main(String[] args) {

		List<String> list = Arrays.asList("티모","베인","티모","릴리야","티모","애쉬");
		
		//중복제거
		list.parallelStream().distinct().forEach(n->System.out.println(n));
		
		//필터처리(원하는 것만 볼수있음)
		list.parallelStream().filter(n->n.startsWith("티")).forEach(n->System.out.println(n));
		
        System.out.println("============");
        
        //홀수만 구하기
		IntStream s = IntStream.of(1,2,3,4,5,6,7,8,9,10);
		s.filter(n -> n%2==1).forEach(n->System.out.println(n));
        //s배열에 2로 나눠서 1이남는 숫자를 필터로 뽑음
		
		

	}

}

 

릴리야
베인
티모
애쉬
티모
티모
티모
1
3
5
7
9

 

split

list의 값중 구분기호를 줄바꿈해줌

 

 

package 스트림;

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

public class Sample07 {

	public static void main(String[] args) {

		List<String> list1 = Arrays.asList("크기 가","전부 는","아니 잖아요");
		//split list1의 값중 구분기호를 줄바꿈해줌
		list1.stream().flatMap(data->Arrays.stream(data.split(" ")))
					 .forEach(System.out::println);
		             //.forEach(data -> System.out.println(data)); 위에코드와 동일
		
		System.out.println();
		
		list1.stream().flatMap(data->Stream.of(data.split(" +")))
					.forEach(System.out::println);
		//글자수 표시 (정수만가능)
		list1.stream().map(data-> data.length())
					  .forEach(System.out::println);

	}

}

크기

전부

아니
잖아요

크기

전부

아니
잖아요
4
4
6

 

 

실수와 관련된 코드

 

package 스트림;

import java.util.Arrays;
import java.util.List;
import java.util.stream.DoubleStream;

public class Sample07 {

	public static void main(String[] args) {
		
				/* 실수와 관련된 코드 */
		 List<String> list2 = Arrays.asList("1.1, 2.2, 3.3", "4.4, 5.5, 6.6");
		 DoubleStream ds = list2.parallelStream().flatMapToDouble(data->{
			 
		 			String[] arr = data.split(",");	//" 1.1" " 2.2" " 3.3" " 4.4" " 5.5" " 6.6" 처리
		 			double[] darr = new double [arr.length];
		 			
		 			for(int i =0; i<darr.length;i++) {
		 				darr[i] = Double.parseDouble(arr[i].trim()); //trim = 공백제거
		 								//parseDouble = arr[i]를 실수형태로 바꿔라
		 			}
		 			return Arrays.stream(darr);
		 });
		 
		 ds.forEach(System.out::println);
		 
	}

}

4.4
5.5
6.6
1.1
2.2
3.3

 

 

Skip,Limit 

 

package 스트림;
//skip
import java.util.stream.IntStream;

public class Sample08 {

	public static void main(String[] args) {

		IntStream p = IntStream.range(0,10);
		
		IntStream s = IntStream.range(0,10);
		
		p.forEach(n->System.out.print(n + " "));
		
		System.out.println();
		
		s.skip(4).forEach(n->System.out.print(n + " "));
		//4번째배열방 다음부터 출력
		//s.limit(4).forEach(n->System.out.print(n + " "));
		//4번째배열방 까지만 출력
		
		s.skip(3).limit(4).forEach(n->System.out.print(n + " "));

	}

}

0 1 2 3 4 5 6 7 8 9 10

skip사용시 결과

4 5 6 7 8 9

limit 사용시 결과

0 1 2 3

s.skip(3).limit(4) 사용시 결과

3 4 5 6

s.skip(4).limit(3) 사용시 결과

3

 

List 내림차순 오름차순 정렬

 

.sorted() 오름차순정렬하기

Comparator.reverseOrder() 내림차순/역순으로 정렬

package 스트림;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class Sample09 {

	public static void main(String[] args) {
		
		List<String> list = Arrays.asList("티모","마이","베인","유미");
		
		list.stream().sorted().forEach(System.out::println);	//오름차순
		 
		System.out.println();
		
		list.stream().sorted(Comparator.reverseOrder())			//역순
					 .forEach(System.out::println);
		
		
		

	}

}

마이
베인
유미
티모

티모
유미
베인
마이

 

 

.count() 배열값을 카운트해준다

.sum() 배열값을 더해준다

.findFirst() 첫번째 배열값을 불러온다

 

package 스트림;

import java.util.Arrays;
import java.util.OptionalInt;

public class Sample10 {

	public static void main(String[] args) {

		int[] arr = new int[100];
		for (int i = 0; i < 100; i++) {
			arr[i] = i + 1;
		}

		// count는 long으로 처리
		// 배열을 스트림으로 하고 카운트 해준다.
		long c = Arrays.stream(arr).count();
		System.out.println("count : " + c);
		
		//1~100더하기
		int s = Arrays.stream(arr).sum();
		System.out.println("sum : " + s);
		
		//첫번째 값 불러오기
		OptionalInt first = Arrays.stream(arr).findFirst();
		System.out.println("first : " + first.getAsInt());

	}
}

count : 100
sum : 5050
first : 1

 

예제1

 

중복없이 짝수만 내림차순으로 정렬

 

 

package 스트림;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;

public class Sample11 {

	public static void main(String[] args) {
		// 짝수만 중복제거 내림차순 출력
		int[] data = { 5, 6, 4, 2, 3, 1, 1, 2, 2, 4, 8 };

		// 짝수만 골라내기
		ArrayList<Integer> list = new ArrayList<>();
		for (int i = 0; i < data.length; i++) {  //data.length = int[]date 배열의 길이
			if (data[i] % 2 == 0) {
				list.add(data[i]); //date에서의 홀수값을 list에 입력
			}
		}

		System.out.println(list);

		// 중복된값 없애기
		HashSet<Integer> set = new HashSet<>(list);
		System.out.println(set); //set 중복값을 없앤다

		ArrayList<Integer> dlist = new ArrayList<>(set);

		dlist.sort(Comparator.reverseOrder()); 
        //sort=오름차순정렬 왜냐 set으로 처리하면 순서없이 값이 저장됨
		System.out.println(dlist);

		// 결론적으로 나온 값 (dlist)를 다시 새 배열에 넣음
		int[] result = new int[dlist.size()];

		for (int i = 0; i < result.length; i++) {
			result[i] = dlist.get(i);
		}
		for (int i = 0; i < result.length; i++) {
			System.out.println(result[i]);
		}

	}
}

[6, 4, 2, 2, 2, 4, 8]
[2, 4, 6, 8]
[8, 6, 4, 2]
8
6
4
2

 

 

더 간단하게 스트림을 사용해서

 

 

package 스트림;

import java.util.Arrays;
import java.util.Comparator;

public class Sample12 {

	public static void main(String[] args) {

		int[] data = { 5, 6, 4, 2, 3, 1, 1, 2, 2, 4, 8 };
		int[] result = Arrays.stream(data)	//IntStream생성
					.boxed()			//IntStream -> Stream<Integer>로 변경
					.filter(n->n%2==0)  //짝수 걸러내기
					.distinct()			//중복제거
					.sorted(Comparator.reverseOrder()) //내림차순정렬
					.mapToInt(Integer::intValue)
					.toArray();
		
		for(int i=0; i<result.length; i++) {
			System.out.println(result[i]);
		}
		

	}

}

8
6
4
2

728x90
Comments