[자바] stream 메서드
- 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
]}