본문 바로가기
JAVA

230109_Stream

by 경 훈 2023. 1. 9.

 

Stream : 자료를 표현하는 또는 값을 구하는 또다른 방식의 하나이다.

 

stream으로 값을 구하는 방식은 여러가지이나

객체를 통해서 값을 얻거나 출력하는 것이 가장 쉬운 방법 중 하나이다.

 

stream 사용법

=객체명.stream().중간함수() ...... 최종함수().

중간함수 : 여러번 사용가능

                maptoInt(클래스명 :: 게터함수())

중간함수 1.값을 불러올때 mapTo~

              2. filter(.. 조건 ..)

              3. sorted(정열)..

 

 

package day26;

import java.text.DecimalFormat;

public class DTO {
	DecimalFormat df = new DecimalFormat("#,##0.0");
	int ban;
	String name;
	int kor,eng,mat;
	int tot;
	double avg;
	String hak;
	String dname;
	public DTO() {}
	
	public DTO(int ban, String name, int kor, int eng, int mat, int tot, double avg, String hak, String dname) {
		super();
		this.ban = ban;
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
		this.tot = tot;
		this.avg = avg;
		this.hak = hak;
		this.dname = dname;
	}

	public int getBan() {
		return ban;
	}
	public void setBan(int ban) {
		this.ban = ban;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMat() {
		return mat;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}
	public int getTot() {
		return tot;
	}
	public void setTot(int tot) {
		this.tot = tot;
	}
	public double getAvg() {
		return avg;
	}
	public void setAvg(double avg) {
		this.avg = avg;
	}
	public String getHak() {
		return hak;
	}
	public void setHak(String hak) {
		this.hak = hak;
	}
	public String getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	@Override
	public String toString() {
		return "[ban=" + ban + ", name=" + name + ", kor=" + kor + ", eng=" + eng + ", mat=" + mat + ", tot=" + tot
				+ ", avg=" + df.format(avg) + ", hak=" + hak + ", dname=" + dname + "]";
	}
}

 

package day26;

import java.io.FileNotFoundException;
import java.util.Scanner;

public class Menu {

	public static void main(String[] args) throws FileNotFoundException {
		Scanner sc = new Scanner(System.in);
		DAO dao = new DAO();
		while(true) {
			try {
				System.out.println("[1]입력");
				System.out.println("[2]출력");
				System.out.println("[0]종료");
				System.out.println("작업할 번호 입력");
				int n = sc.nextInt();
				switch (n) {
				case 0:System.exit(0);break;
				case 1:dao.insert();break;
				case 2:dao.out();break;
				}
			}
			catch(NumberFormatException e) {
				System.out.println("문자입력은 안됩니다.");
			}
		}
	}
}

 

package day26;

import java.util.ArrayList;

public class SingleTon {
	private static SingleTon ston;
	//하나의 메소드를 만들어서 호출하면 ston 객체를 반환
	ArrayList<DTO> list = new ArrayList<DTO>();
	public static SingleTon single() {
		if(ston==null)
			ston = new SingleTon();
		return ston;
	}
	//list 객체 저장소에 객체를 추가 시키는 메소드
	public void addin(DTO dto) {
		list.add(dto);
	}
	//출력하는 기능
	public ArrayList<DTO> out() {
		return list;
	}
}

 

package day26;

import java.text.ChoiceFormat;

public class Process {
	public int tot(int kor,int eng,int mat) {
		return kor+eng+mat;
	}
	public double avg(int tot) {
		return (double)tot/3;
	}
	public String hak(double avg) {
		double [] avg1 = {0,60,70,80,90}; //기준점수
		String [] hak1 = {"F","D","C","B","A"};
		ChoiceFormat cf = new ChoiceFormat(avg1, hak1);
		return cf.format(avg);
	}
}

 

package day26;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class DAO { //생성자의 역활이?...싱글톤의 객체를 호출하여 ston 객체를 초기화
	private SingleTon ston;
	public DAO() {
		ston = SingleTon.single();
	}
	enum bu{f("축구"),b("야구"),g("게임");
		private String value;
		private bu(String value) {
			this.value = value;
		}
		public String getValue() {
			return value;
		}
	}
	//자료입력기능
	public void insert() throws FileNotFoundException {
		FileReader fr = new FileReader("c:/data/01091.txt");
		BufferedReader br = new BufferedReader(fr);
		
		while(true) {
			try {
				String str = br.readLine();
				if(str==null)break;
				DTO dto = new DTO();
				Process pr = new Process();
//				int ban = Integer.parseInt(str.substring(0, 1));
//				String name = str.substring(1, 4);
//				int kor = Integer.parseInt(str.substring(4, 7));
//				int eng = Integer.parseInt(str.substring(7, 10));
//				int mat = Integer.parseInt(str.substring(10, 13));
//				String dname = bu.valueOf(str.substring(13, 14)).getValue();
//				int tot = pr.tot(kor, eng, mat);
//				double avg = pr.avg(tot);
//				String hak = pr.hak(avg);
//				ston.addin(new DTO(ban, name, kor, eng, mat, tot, avg, hak, dname));
				
				//세터 입력 방식
				dto.setBan(Integer.parseInt(str.substring(0, 1)));
				dto.setName(str.substring(1, 4));
				dto.setKor(Integer.parseInt(str.substring(4, 7)));
				dto.setEng(Integer.parseInt(str.substring(7, 10)));
				dto.setMat(Integer.parseInt(str.substring(10, 13)));
				dto.setDname(bu.valueOf((str.substring(13, 14))).getValue());
				dto.setTot(pr.tot(dto.getKor(), dto.getEng(), dto.getMat()));
				dto.setAvg(pr.avg(dto.getTot()));
				dto.setHak(pr.hak(dto.getAvg()));
				ston.addin(dto);
			}
			catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	//자료를 화면에 View 기능
	public void out() {
		ston.out().forEach(s->System.out.println(s.toString()));
	}
}

package day26;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.OptionalDouble;

public class DAO { //생성자의 역활이?...싱글톤의 객체를 호출하여 ston 객체를 초기화
	private SingleTon ston;
	public DAO() {
		ston = SingleTon.single();
	}
	enum bu{f("축구"),b("야구"),g("게임");
		private String value;
		private bu(String value) {
			this.value = value;
		}
		public String getValue() {
			return value;
		}
	}
	//자료입력기능
	public void insert() throws FileNotFoundException {
		FileReader fr = new FileReader("c:/data/01091.txt");
		BufferedReader br = new BufferedReader(fr);
		
		while(true) {
			try {
				String str = br.readLine();
				if(str==null)break;
				DTO dto = new DTO();
				Process pr = new Process();
//				int ban = Integer.parseInt(str.substring(0, 1));
//				String name = str.substring(1, 4);
//				int kor = Integer.parseInt(str.substring(4, 7));
//				int eng = Integer.parseInt(str.substring(7, 10));
//				int mat = Integer.parseInt(str.substring(10, 13));
//				String dname = bu.valueOf(str.substring(13, 14)).getValue();
//				int tot = pr.tot(kor, eng, mat);
//				double avg = pr.avg(tot);
//				String hak = pr.hak(avg);
//				ston.addin(new DTO(ban, name, kor, eng, mat, tot, avg, hak, dname));
				
				//세터 입력 방식
				dto.setBan(Integer.parseInt(str.substring(0, 1)));
				dto.setName(str.substring(1, 4));
				dto.setKor(Integer.parseInt(str.substring(4, 7)));
				dto.setEng(Integer.parseInt(str.substring(7, 10)));
				dto.setMat(Integer.parseInt(str.substring(10, 13)));
				dto.setDname(bu.valueOf((str.substring(13, 14))).getValue());
				dto.setTot(pr.tot(dto.getKor(), dto.getEng(), dto.getMat()));
				dto.setAvg(pr.avg(dto.getTot()));
				dto.setHak(pr.hak(dto.getAvg()));
				ston.addin(dto);
			}
			catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	// 자료를 화면에 View 기능
	public void out() {
		DecimalFormat df = new DecimalFormat("#,##0.0");
		ArrayList<DTO> list = ston.out();
		list.forEach(s->System.out.println(s.toString()));
		// 전체 자료의 갯수
		long inwon1 = list.stream().count();
		System.out.println("전체자료의 갯수 : "+inwon1);
		// 점수 합계
		int kortot = list.stream().mapToInt(DTO::getKor).sum();
		int engtot = list.stream().mapToInt(DTO::getEng).sum();
		int mattot = list.stream().mapToInt(DTO::getMat).sum();
		System.out.println("국어 점수 합계 : "+kortot);
		System.out.println("영어 점수 합계 : "+engtot);
		System.out.println("수학 점수 합계 : "+mattot);
		// 점수 평균
		double koravg = list.stream().mapToInt(DTO::getKor).average().getAsDouble();
		System.out.println("국어 평균 : "+df.format(koravg));
		double engavg = list.stream().mapToInt(DTO::getEng).average().getAsDouble();
		System.out.println("영어 평균 : "+df.format(engavg));
		double matavg = list.stream().mapToInt(DTO::getMat).average().getAsDouble();
		System.out.println("수학 평균 : "+df.format(matavg));
		//전체 총점
		int tottot = list.stream().mapToInt(DTO::getTot).sum();
		System.out.println("전체 점수 합계 : "+tottot);
		//전체 평균
		double avgavg = list.stream().mapToDouble(DTO::getAvg).average().getAsDouble();
		System.out.println("전체 평균 : "+df.format(avgavg));
	}
}

 

package day26;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.OptionalDouble;
import java.util.stream.Collectors;

public class DAO { //생성자의 역활이?...싱글톤의 객체를 호출하여 ston 객체를 초기화
	private SingleTon ston;
	public DAO() {
		ston = SingleTon.single();
	}
	enum bu{f("축구"),b("야구"),g("게임");
		private String value;
		private bu(String value) {
			this.value = value;
		}
		public String getValue() {
			return value;
		}
	}
	//자료입력기능
	public void insert() throws FileNotFoundException {
		FileReader fr = new FileReader("c:/data/01091.txt");
		BufferedReader br = new BufferedReader(fr);
		
		while(true) {
			try {
				String str = br.readLine();
				if(str==null)break;
				DTO dto = new DTO();
				Process pr = new Process();
//				int ban = Integer.parseInt(str.substring(0, 1));
//				String name = str.substring(1, 4);
//				int kor = Integer.parseInt(str.substring(4, 7));
//				int eng = Integer.parseInt(str.substring(7, 10));
//				int mat = Integer.parseInt(str.substring(10, 13));
//				String dname = bu.valueOf(str.substring(13, 14)).getValue();
//				int tot = pr.tot(kor, eng, mat);
//				double avg = pr.avg(tot);
//				String hak = pr.hak(avg);
//				ston.addin(new DTO(ban, name, kor, eng, mat, tot, avg, hak, dname));
				
				//세터 입력 방식
				dto.setBan(Integer.parseInt(str.substring(0, 1)));
				dto.setName(str.substring(1, 4));
				dto.setKor(Integer.parseInt(str.substring(4, 7)));
				dto.setEng(Integer.parseInt(str.substring(7, 10)));
				dto.setMat(Integer.parseInt(str.substring(10, 13)));
				dto.setDname(bu.valueOf((str.substring(13, 14))).getValue());
				dto.setTot(pr.tot(dto.getKor(), dto.getEng(), dto.getMat()));
				dto.setAvg(pr.avg(dto.getTot()));
				dto.setHak(pr.hak(dto.getAvg()));
				ston.addin(dto);
			}
			catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	// 자료를 화면에 View 기능
	public void out() {
		DecimalFormat df = new DecimalFormat("#,##0.0");
		ArrayList<DTO> list = ston.out();
		System.out.println("==람다식 출력");//람다식 출력
		list.forEach(s->System.out.println(s.toString()));
			
		//조건에 맞는 자료만 출력 ... 국어 점수가 70이상만 검색
		long inwon2 = list.stream().filter(s->s.getKor()>=70).count();
		System.out.println("국어점수가 70점 이상인 자료의 건 수 : "+inwon2+"건");
		//총점이 240인 자료의 건수
		long inwon3 = list.stream().filter(s->s.getTot()>=240).count();
		System.out.println("총점이 240점 이상인 자료의 건 수 : "+inwon3+"건");
		//국어 수학 모두 70이상인 자료의 건수
		long inwon4 = list.stream().filter(s->s.getKor()>=70 && s.getMat()>=70).count();
		System.out.println("국어,수학점수가 70점 이상인 자료의 건 수 : "+inwon4+"건");
		//국어 점수가 70이상인 자료만 출력..목록 다시 생성
		List<DTO> list2 = list.stream().filter(s->s.getKor()>=70).collect(Collectors.toList());
		System.out.println("국어점수 70점 이상인 자료목록\n======================");
		list2.forEach(s->System.out.println(s.toString()));
		
//		System.out.println("==빠른 for");//빠른 for
//		for(DTO a:list) {
//			System.out.println(a.toString());
//		}
//		// 전체 자료의 갯수
//		long inwon1 = list.stream().count();
//		System.out.println("전체자료의 갯수 : "+inwon1);
//		// 점수 합계
//		int kortot = list.stream().mapToInt(DTO::getKor).sum();
//		int engtot = list.stream().mapToInt(DTO::getEng).sum();
//		int mattot = list.stream().mapToInt(DTO::getMat).sum();
//		System.out.println("국어 점수 합계 : "+kortot);
//		System.out.println("영어 점수 합계 : "+engtot);
//		System.out.println("수학 점수 합계 : "+mattot);
//		// 점수 평균
//		double koravg = list.stream().mapToInt(DTO::getKor).average().getAsDouble();
//		System.out.println("국어 평균 : "+df.format(koravg));
//		double engavg = list.stream().mapToInt(DTO::getEng).average().getAsDouble();
//		System.out.println("영어 평균 : "+df.format(engavg));
//		double matavg = list.stream().mapToInt(DTO::getMat).average().getAsDouble();
//		System.out.println("수학 평균 : "+df.format(matavg));
//		//전체 총점
//		int tottot = list.stream().mapToInt(DTO::getTot).sum();
//		System.out.println("전체 점수 합계 : "+tottot);
//		//전체 평균
//		double avgavg = list.stream().mapToDouble(DTO::getAvg).average().getAsDouble();
//		System.out.println("전체 평균 : "+df.format(avgavg));
	}
}

 

package day26;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class DAO { //생성자의 역활이?...싱글톤의 객체를 호출하여 ston 객체를 초기화
	private SingleTon ston;
	public DAO() {
		ston = SingleTon.single();
	}
	enum bu{f("축구"),b("야구"),g("게임");
		private String value;
		private bu(String value) {
			this.value = value;
		}
		public String getValue() {
			return value;
		}
	}
	//자료입력기능
	public void insert() throws FileNotFoundException {
		FileReader fr = new FileReader("c:/data/01091.txt");
		BufferedReader br = new BufferedReader(fr);
		
		while(true) {
			try {
				String str = br.readLine();
				if(str==null)break;
				DTO dto = new DTO();
				Process pr = new Process();
//				int ban = Integer.parseInt(str.substring(0, 1));
//				String name = str.substring(1, 4);
//				int kor = Integer.parseInt(str.substring(4, 7));
//				int eng = Integer.parseInt(str.substring(7, 10));
//				int mat = Integer.parseInt(str.substring(10, 13));
//				String dname = bu.valueOf(str.substring(13, 14)).getValue();
//				int tot = pr.tot(kor, eng, mat);
//				double avg = pr.avg(tot);
//				String hak = pr.hak(avg);
//				ston.addin(new DTO(ban, name, kor, eng, mat, tot, avg, hak, dname));
				
				//세터 입력 방식
				dto.setBan(Integer.parseInt(str.substring(0, 1)));
				dto.setName(str.substring(1, 4));
				dto.setKor(Integer.parseInt(str.substring(4, 7)));
				dto.setEng(Integer.parseInt(str.substring(7, 10)));
				dto.setMat(Integer.parseInt(str.substring(10, 13)));
				dto.setDname(bu.valueOf((str.substring(13, 14))).getValue());
				dto.setTot(pr.tot(dto.getKor(), dto.getEng(), dto.getMat()));
				dto.setAvg(pr.avg(dto.getTot()));
				dto.setHak(pr.hak(dto.getAvg()));
				ston.addin(dto);
			}
			catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	// 자료를 화면에 View 기능
	public void out() {
		DecimalFormat df = new DecimalFormat("#,##0.0");
		ArrayList<DTO> list = ston.out();
		System.out.println("==람다식 출력");//람다식 출력
		list.forEach(s->System.out.println(s.toString()));
		//정열하는 ... 반별 오름차순 정열..
		System.out.println("==반 오름차순 정열");
		List<DTO> list3 = list.stream().sorted(Comparator.comparing(DTO::getBan)).collect(Collectors.toList());
		list3.forEach(s->System.out.println(s.toString()));
		System.out.println("==이름별 오름차순 정열");
		List<DTO> list5 = list.stream().sorted(Comparator.comparing(DTO::getName)).collect(Collectors.toList());
		list5.forEach(s->System.out.println(s.toString()));
		System.out.println("==총점 오름차순 정열");
		List<DTO> list4 = list.stream().sorted(Comparator.comparing(DTO::getTot)).collect(Collectors.toList());
		list4.forEach(s->System.out.println(s.toString()));
		System.out.println("==반 내림차순 정열");
		List<DTO> bandesc = list.stream().sorted(Comparator.comparing(DTO::getBan).reversed()).collect(Collectors.toList());
		bandesc.forEach(s->System.out.println(s.toString()));
		System.out.println("==총점 내림차순 정열");
		List<DTO> list6 = list.stream().sorted(Comparator.comparing(DTO::getTot).reversed()).collect(Collectors.toList());
		list6.forEach(s->System.out.println(s.toString()));
		System.out.println("==동아리 내림차순 정열");
		List<DTO> list7 = list.stream().sorted(Comparator.comparing(DTO::getDname).reversed()).collect(Collectors.toList());
		list7.forEach(s->System.out.println(s.toString()));
		
		
//		//조건에 맞는 자료만 출력 ... 국어 점수가 70이상만 검색
//		long inwon2 = list.stream().filter(s->s.getKor()>=70).count();
//		System.out.println("국어점수가 70점 이상인 자료의 건 수 : "+inwon2+"건");
//		//총점이 240인 자료의 건수
//		long inwon3 = list.stream().filter(s->s.getTot()>=240).count();
//		System.out.println("총점이 240점 이상인 자료의 건 수 : "+inwon3+"건");
//		//국어 수학 모두 70이상인 자료의 건수
//		long inwon4 = list.stream().filter(s->s.getKor()>=70 && s.getMat()>=70).count();
//		System.out.println("국어,수학점수가 70점 이상인 자료의 건 수 : "+inwon4+"건");
//		//국어 점수가 70이상인 자료만 출력..목록 다시 생성
//		List<DTO> list2 = list.stream().filter(s->s.getKor()>=70).collect(Collectors.toList());
//		System.out.println("국어점수 70점 이상인 자료목록\n======================");
//		list2.forEach(s->System.out.println(s.toString()));
		
		
//		System.out.println("==빠른 for");//빠른 for
//		for(DTO a:list) {
//			System.out.println(a.toString());
//		}
//		// 전체 자료의 갯수
//		long inwon1 = list.stream().count();
//		System.out.println("전체자료의 갯수 : "+inwon1);
//		// 점수 합계
//		int kortot = list.stream().mapToInt(DTO::getKor).sum();
//		int engtot = list.stream().mapToInt(DTO::getEng).sum();
//		int mattot = list.stream().mapToInt(DTO::getMat).sum();
//		System.out.println("국어 점수 합계 : "+kortot);
//		System.out.println("영어 점수 합계 : "+engtot);
//		System.out.println("수학 점수 합계 : "+mattot);
//		// 점수 평균
//		double koravg = list.stream().mapToInt(DTO::getKor).average().getAsDouble();
//		System.out.println("국어 평균 : "+df.format(koravg));
//		double engavg = list.stream().mapToInt(DTO::getEng).average().getAsDouble();
//		System.out.println("영어 평균 : "+df.format(engavg));
//		double matavg = list.stream().mapToInt(DTO::getMat).average().getAsDouble();
//		System.out.println("수학 평균 : "+df.format(matavg));
//		//전체 총점
//		int tottot = list.stream().mapToInt(DTO::getTot).sum();
//		System.out.println("전체 점수 합계 : "+tottot);
//		//전체 평균
//		double avgavg = list.stream().mapToDouble(DTO::getAvg).average().getAsDouble();
//		System.out.println("전체 평균 : "+df.format(avgavg));
	}
}

 

package day26;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeMap;
import java.util.stream.Collectors;

public class DAO { //생성자의 역활이?...싱글톤의 객체를 호출하여 ston 객체를 초기화
	private SingleTon ston;
	public DAO() {
		ston = SingleTon.single();
	}
	enum bu{f("축구"),b("야구"),g("게임");
		private String value;
		private bu(String value) {
			this.value = value;
		}
		public String getValue() {
			return value;
		}
	}
	//자료입력기능
	public void insert() throws FileNotFoundException {
		FileReader fr = new FileReader("c:/data/01091.txt");
		BufferedReader br = new BufferedReader(fr);
		
		while(true) {
			try {
				String str = br.readLine();
				if(str==null)break;
				DTO dto = new DTO();
				Process pr = new Process();
//				int ban = Integer.parseInt(str.substring(0, 1));
//				String name = str.substring(1, 4);
//				int kor = Integer.parseInt(str.substring(4, 7));
//				int eng = Integer.parseInt(str.substring(7, 10));
//				int mat = Integer.parseInt(str.substring(10, 13));
//				String dname = bu.valueOf(str.substring(13, 14)).getValue();
//				int tot = pr.tot(kor, eng, mat);
//				double avg = pr.avg(tot);
//				String hak = pr.hak(avg);
//				ston.addin(new DTO(ban, name, kor, eng, mat, tot, avg, hak, dname));
				
				//세터 입력 방식
				dto.setBan(Integer.parseInt(str.substring(0, 1)));
				dto.setName(str.substring(1, 4));
				dto.setKor(Integer.parseInt(str.substring(4, 7)));
				dto.setEng(Integer.parseInt(str.substring(7, 10)));
				dto.setMat(Integer.parseInt(str.substring(10, 13)));
				dto.setDname(bu.valueOf((str.substring(13, 14))).getValue());
				dto.setTot(pr.tot(dto.getKor(), dto.getEng(), dto.getMat()));
				dto.setAvg(pr.avg(dto.getTot()));
				dto.setHak(pr.hak(dto.getAvg()));
				ston.addin(dto);
			}
			catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	// 자료를 화면에 View 기능
	public void out() {
		DecimalFormat df = new DecimalFormat("#,##0.0");
		ArrayList<DTO> list = ston.out();
		System.out.println("==람다식 출력");//람다식 출력
		list.forEach(s->System.out.println(s.toString()));
		//반별 국어 총점
		TreeMap<Integer, String> map = new TreeMap<Integer, String>();
		for(int i=0;i<list.size();i++) {
			map.put(list.get(i).getBan(), list.get(i).getName());
		}
		//1. 키값만 모음
		Set<Integer> kset = map.keySet();
		Iterator<Integer> it = kset.iterator();
		while(it.hasNext()) {
			Integer ban = it.next();
			long count = list.stream().filter(s->s.getBan()==ban).count();
			int kortot = list.stream().filter(s->s.getBan()==ban).mapToInt(DTO::getKor).sum();
			int engtot = list.stream().filter(s->s.getBan()==ban).mapToInt(DTO::getEng).sum();
			int mattot = list.stream().filter(s->s.getBan()==ban).mapToInt(DTO::getMat).sum();
			int tottot = list.stream().filter(s->s.getBan()==ban).mapToInt(DTO::getTot).sum();
			double koravg = list.stream().filter(s->s.getBan()==ban).mapToDouble(DTO::getKor).average().getAsDouble();
			double engavg = list.stream().filter(s->s.getBan()==ban).mapToDouble(DTO::getEng).average().getAsDouble();
			double matavg = list.stream().filter(s->s.getBan()==ban).mapToDouble(DTO::getMat).average().getAsDouble();
			double avgavg = list.stream().filter(s->s.getBan()==ban).mapToDouble(DTO::getAvg).average().getAsDouble();
			System.out.println("===============================================");
			System.out.println(ban+"반 전체 인원 : "+count);
			System.out.println(ban+"반 국어 총점 :  "+kortot+" 영어 총점 :  "+engtot+" 수학 총점 :  "+mattot);
			System.out.println(ban+"반 국어 평균 : "+df.format(koravg)+" 영어 평균 : "+df.format(engavg)+" 수학 평균 : "+df.format(matavg));
			System.out.println(ban+"반 전과목 총점 : "+tottot+" 전과목 평균 : "+df.format(avgavg));
		}
	}
}

'JAVA' 카테고리의 다른 글

230111_Stream  (0) 2023.01.11
230110_Stream  (0) 2023.01.10
230106_Map  (0) 2023.01.06
230105_Map  (0) 2023.01.05
230104_Map  (0) 2023.01.04

댓글