본문 바로가기

JAVA 공책/수업 메모

Student 테이블을 만들어서 stream API 연습하기

오라클 sql에서 이렇게 테이블을 만들어 놓고 Stream API 연습 시작.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package studentSemple;
 
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.OptionalDouble;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class StreamMain {
    public int mm () {
        int result = 1;
        System.out.print("Hello");
        return result;
    }
    public static void main(String[] args) {
        StudentDAO dao = new StudentDAO();
        List<StudentVO> list = dao.fetch();
        
        
        /*
        System.out.println(list);
        for(StudentVO vo : list) {
    //!--출력하는 메소드에 인스턴스이름을 대입하면 toString의 결과
        System.out.println(vo);
        */
        
    //!--stream 생성
        Stream<StudentVO> stream = list.stream();
    //!--데이터를 2개 건너띄고 3개 출력
        //stream.skip(2).limit(3).forEach(data -> System.out.println(data));
        
    //!--남자인 데이터만 출력
        //stream.filter(data -> data.getGender().equals("남자")).forEach(data -> System.out.println(data));
    
    //!--데이터 정렬하기 - score
    //!--숫자
        //stream.sorted((n1, n2)->n1.getScore() - n2.getScore()).forEach(data->System.out.println(data));
    //!--문자 compareTo()의 괄호 안에 비교하려는 값을 넣기.
        //stream.sorted((n1, n2)->n1.getName().compareTo(n2.getName())).forEach(data->System.out.println(data));
    //!--기본적으로는 오름차순이고, 내림차순으로 바꾸고 싶다면 n1과 n2의 위치만 바꾸면 된다.    
        
    //!--남자 중에 성적 순으로 나열
        //stream.filter(data->data.getGender().equals("남자")).sorted((n1, n2)->n1.getScore()-n2.getScore()).forEach(data->System.out.println(data));
        
    //!--최종 처리 메소드 : 마지막에 써서 결과를 리턴 받음! 중간 중간에 중간 처리 메소드를 넣을 수 있고 끝에는 최종 처리 메소드로 끝내서 결과를 받으면 됨.
        //long cont = stream.filter(data->data.getGender().equals("남자")).count();
        //System.out.println(cont);
        
    //!--Optional로 묶여 있으면 null이 올 수 없다.
        //null일 때 어떻게 반환하거나 어떻게 바꾸어라 하는 것이니까.
        //그래서 nall이 올 수 있도록 Optional 랩핑을 벗기기 위해서
        //get()을 사용한다.
        //아래의 두 경우는 같은 값을 지닌다. get()을 사용하지 않으면 Optional로 묶여서 null을 가질 수 없다.
        //Optional로 리턴되는 데이터는 한 번 더 가공을 해야 합니다.
        /*StudentVO vo = stream.findFirst().get();
        System.out.println(vo);*/
        
        /*Optional<StudentVO> bo = stream.findFirst();
         System.out.println(bo.get());*/
        
    //!--score의 합계 구하기
        //숫자 데이터가 아니면 바로 합계를 구할 수 없기 때문에
        //map 메소드를 이용해서 숫자 데이터로 변경 후 합계를 구해야 합니다.
        /*int sum = stream.mapToInt(StudentVO::getScore).sum();
        System.out.println(sum);*/
        
    //!--age의 평균 구하기
        /*double age = stream.mapToInt(StudentVO::getAge).average().getAsDouble();
        System.out.println(age);*/
        
    //!--성별이 남자인 데이터의 평균 점수를 구하는데 소수 1째 자리 에서 반올림해서 정수 부분만 출력
        /*double avg = stream.filter(data->data.getGender().equals("남자")).mapToInt(StudentVO::getScore).average().getAsDouble();
        int avgInt = (int)(avg + 0.5);
        System.out.println(avg);
        System.out.println("남자의 평균 점수는 : "+avgInt);*/
        
    //!--성별이 여자인 데이터만 가지고 List를 생성
        /*List<StudentVO> list2 = stream.filter(data->data.getGender().equals("여자")).collect(Collectors.toList());
        for(StudentVO temp : list2) {
            System.out.println(temp);
        }*/
        
    //!--이름과 점수만을 갖는 Map으로 생성
        /*Map<String, Integer> map = stream.collect(Collectors.toMap(StudentVO::getName, StudentVO::getScore));
        System.out.println(map);*/
        /*Map<String, Integer> map = stream.collect(Collectors.toMap(StudentVO::getName, data->data.getScore()));
        System.out.println(map);*/
        
    //!--성별이 남자이고 score가 90이상인 데이터의 list를 생성해서 출력
        List <StudentVO> list3 = stream.filter(data->data.getGender().equals("남자"&& data.getScore() >= 90).collect(Collectors.toList());
        for(StudentVO comp : list3) {
            System.out.println(comp);
        }
    
    }
    }
 
 
 
cs


'JAVA 공책 > 수업 메모' 카테고리의 다른 글

java lang 패키지  (0) 2018.08.28
pakage의 정의와 API의 구조와 해석법  (0) 2018.08.27
상위클래스의 생성자를 호출하는 방법  (0) 2018.08.06
DB(Oracle)_Database&Oracle  (0) 2018.07.25
통신  (0) 2018.07.24