728x90

이 내용은 다른 블로그에 있는 걸 거의 그대로 베껴서 코드가 동작하는 걸 확인해보고 적어둔다.

문제

//member.csv 파일 일부 
이름, 취미, 소개 
김프로, 축구:농구:야구, 구기종목 좋아요 
정프로, 개발:당구:족구, 개발하는데 뛰긴 싫어 
앙몬드, 피아노, 죠르디가 좋아요 좋아좋아너무좋아 
죠르디, 스포츠댄스:개발, 개발하는 죠르디
정미애, 노래:스포츠댄스:개발, 이선희 모창가수 좋아요
 

1. CSV 파일을 읽어서 취미별 인원수를 구하라.

2. CSV 파일을 읽어서 취미별 정씨성을 가진 멤버 수를 구하라.

3. CSV 파일을 읽어서 소개 내용에 '좋아'가 몇번 등장하는 지 카운트하라.

 

 

코드 구현 예제

import java.io.*;
import java.util.*;
 
public class StreamEX6 {
    public static void main(String[] args) {
        // 코드 출처 : https://jeong-pro.tistory.com/212 (동작하는 코드로 작성)
        StreamEX6 st = new StreamEX6();
        st.printMemberCountGroupByHobby();
        System.out.println("======================");
        st.printMemberCountGroupByJeongMember();
        System.out.println("======================");
        st.printLikeCount();
    }
 
    public void printMemberCountGroupByHobby() { // 취미별 인원수 구하기
        List<List<String>> members = readCSV();
 
        members.remove(0); //첫줄 제거
        //System.out.println(members); // 출력하여 확인
 
        Map<String, Integer> result = new HashMap<>(); //결과를 담을 해시맵 구성
        members.stream()
                .flatMap(line -> Arrays.stream(line.get(1).replace(" ","").split(":")))
                //.peek(s->System.out.printf("hobby=%s%n",s))
                .forEach(hobby -> result.merge(hobby, 1, (oldValue, newValue)->++oldValue));
        //출력
        result.entrySet().forEach(entry -> System.out.println(entry.getKey() + " " + entry.getValue()));
    }
 
    public void printMemberCountGroupByJeongMember(){ // 취미별 정씨 성을 갖는 멤버 수
        List<List<String>> members = readCSV();
 
        members.remove(0); //첫줄 제거
        //System.out.println(members);
 
        Map<String, Integer> result = new HashMap<>(); //결과를 담을 해시맵 구성
        members.stream()
                .filter(line->line.get(0).startsWith("정"))
                .flatMap(line -> Arrays.stream(line.get(1).replace(" ","").split(":")))
                //.peek(s->System.out.printf("hobby=%s%n",s))
                .forEach(hobby -> result.merge(hobby, 1, (oldValue, newValue)->++oldValue));
        //출력
        result.entrySet().forEach(entry -> System.out.println(entry.getKey() + " " + entry.getValue()));
    }
 
    public void printLikeCount(){ // 소개 내용에 '좋아'가 몇번 등장하는지 구하기
        List<List<String>> members = readCSV();
 
        members.remove(0); // 첫줄 제거
        //System.out.println(members);
 
        final String word = "좋아";
        int result = members.stream()
                .map(line -> countFindString(line.get(2),word))
                .reduce(0,Integer::sum);
 
        // 출력
        System.out.println(word + " " + result);
    }
 
    private int countFindString(String source, String target){
        int idx = source.indexOf(target);
        if(idx == -1){
            return 0;
        } else {
            return 1 + countFindString(source.substring(idx+1), target);
        }
    }
 
 
    public static List<List<String>> readCSV() {
        List<List<String>> csvList = new ArrayList<List<String>>();
        File csv = new File("c:\\Workspace\\Java\\StreamEX\\src\\members.csv"); // 절대 경로
        BufferedReader reader = null;
        String line = "";
 
        try {
            reader = new BufferedReader(new FileReader(csv));
            while ((line = reader.readLine()) != null) { // readLine()은 파일에서 개행된 한 줄의 데이터를 읽어온다.
                List<String> tmpList = new ArrayList<String>();
                String[] lineArr = line.split(","); // 파일의 한 줄을 ,로 나누어 배열에 저장 후 리스트로 변환한다.
                tmpList = Arrays.asList(lineArr); // 배열을 리스트로 변환
                csvList.add(tmpList);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader != null) {
                    reader.close(); // 사용 후 BufferedReader를 닫아준다.
                }
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
        //System.out.println(csvList); // 읽어들인 파일의 리스트 확인
        return csvList;
    }
 
}
 

 

 

728x90

'안드로이드 > Java 문법' 카테고리의 다른 글

[java] Wrapper Class  (0) 2021.11.18
[Java ] Stream 예제  (0) 2021.11.15
[Java] Generics 예제1  (2) 2021.11.10
HashMap 예제  (0) 2021.10.30
[Java] HashSet 를 이용한 ArrayList 중복제거 및 정렬  (0) 2020.12.12
블로그 이미지

Link2Me

,