Java/JAVA8

[자바] stream 메서드

달의요정루나 2021. 7. 21. 00:26

- Person 클래스

public class Person {
	private String firstName;
	private String lastName;
	private String job;
	private String gender;
	private int age;
	private int salary;
	
	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getSalary() {
		return salary;
	}

	public void setSalary(int salary) {
		this.salary = salary;
	}

	public Person(String firstName, String lastName, String job, String gender, int age, int salary) {
		this.firstName=firstName;
		this.lastName=lastName;
		this.job=job;
		this.gender=gender;
		this.age=age;
		this.salary=salary;
	}
	
	@Override
	public String toString() {
		return "Developer [name = " + firstName +" "+lastName+", job = "+job+", gender = "
				+gender+ ", age = " +age+", salary = " +salary+"]\n";
	}
	
}

- 자바 스트림

package lambda1;

import java.util.ArrayList;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class JavaStream {
	public static void main(String[] args) {
		List<Person> results = new ArrayList<Person>();
		
		results.add(new Person("Elsdon", "Jaycob","Java programmer","male",43,2000));
		results.add(new Person("Tamsen", "Brittany","Java programmer","female",23,1500));
		results.add(new Person("Floyd", "Donny","Java programmer","male",33,1800));
		results.add(new Person("Sindy", "Jonie","Java programmer","female",32,1600));
		results.add(new Person("Vere", "Hervey","Java programmer","male",22,1200));
		results.add(new Person("Maude", "Jaimie","Java programmer","female",27,1900));
		results.add(new Person("Shawn", "Randall","Java programmer","male",30,2300));
		results.add(new Person("Jayden", "Corrina","Java programmer","female",35,1700));
		results.add(new Person("Palmer", "Dene","Java programmer","male",33,2000));
		results.add(new Person("Addison", "Pam","Java programmer","female",34,1300));
		
		results.add(new Person("Jarrod", "Pace","PHP programmer","male",34,1550));
		results.add(new Person("Clarette", "Cicely","PHP programmer","female",23,1200));
		results.add(new Person("Victor", "Channing","PHP programmer","male",32,1600));
		results.add(new Person("Tori", "Sheryl","PHP programmer","female",21,1000));
		results.add(new Person("Osborne", "Shad","PHP programmer","male",32,1100));
		results.add(new Person("Rosalind", "Layla","PHP programmer","female",25,1300));
		results.add(new Person("Fraser", "Hewie","PHP programmer","male",36,1100));
		results.add(new Person("Quinn", "Tamara","PHP programmer","female",21,1000));
		results.add(new Person("Alvin", "Lance","PHP programmer","male",38,1600));
		results.add(new Person("Evonne", "Shari","PHP programmer","female",40,1800));
		
		IntSummaryStatistics status = results.stream()
				.mapToInt(p->p.getSalary())
				.summaryStatistics();
		System.out.println("최대값: "+ status.getMax());
		System.out.println("최소값: "+status.getMin());
		System.out.println("합계: "+status.getSum());
		System.out.println("평균값: "+status.getAverage());
		//summaryStatistics collect를 사용해 Java Programmer 월급의 최대,최소,총합,평균값 구함
        
		List<Object> map = results
				.stream()
				.map(p -> {
					p.setSalary(p.getSalary() + p.getSalary()*7/100);
					return p;
				})
				.collect(Collectors.mapping(p->p.getFirstName() +" "+p.getLastName()+":"+p.getSalary()+"\n", Collectors.toList()));
		System.out.println(map);
		System.out.println();
		//Job이 Java Programmer인 사람만 월급 7% 올려서 Map<Fullname, 인상된 salary>로 표기
        //Collectors.toMap(Function keyMapper, Function valueMapper)를 이용
        
		Map<Object, List<Object>> map1 = results
				.stream()
				.collect(Collectors.groupingBy(p->(p.getAge()/10)*10,
				Collectors.mapping(p->p.getFirstName() +" "+
				p.getLastName() +":"+p.getSalary()+"\n", Collectors.toList())));
		System.out.println(map1);
        // PHP 개발자의 연봉을 100단위로 끊어서 각 단위별로 이름 fullname(gender)의 형식으로 표시
        // Collectors.groupingBy를 이용
	}

}

- 결과

더보기

최대값: 2300
최소값: 1000
합계: 30550
평균값: 1527.5
[Elsdon Jaycob:2140
, Tamsen Brittany:1605
, Floyd Donny:1926
, Sindy Jonie:1712
, Vere Hervey:1284
, Maude Jaimie:2033
, Shawn Randall:2461
, Jayden Corrina:1819
, Palmer Dene:2140
, Addison Pam:1391
, Jarrod Pace:1658
, Clarette Cicely:1284
, Victor Channing:1712
, Tori Sheryl:1070
, Osborne Shad:1177
, Rosalind Layla:1391
, Fraser Hewie:1177
, Quinn Tamara:1070
, Alvin Lance:1712
, Evonne Shari:1926
]

{20=[Tamsen Brittany:1605
, Vere Hervey:1284
, Maude Jaimie:2033
, Clarette Cicely:1284
, Tori Sheryl:1070
, Rosalind Layla:1391
, Quinn Tamara:1070
], 40=[Elsdon Jaycob:2140
, Evonne Shari:1926
], 30=[Floyd Donny:1926
, Sindy Jonie:1712
, Shawn Randall:2461
, Jayden Corrina:1819
, Palmer Dene:2140
, Addison Pam:1391
, Jarrod Pace:1658
, Victor Channing:1712
, Osborne Shad:1177
, Fraser Hewie:1177
, Alvin Lance:1712
]}