티스토리 뷰

collect

collect(Colltecor<? super T,A,R> collector)

  • 파라미터인 Collector 인터페이스 대신에 Collecter 클래스를 사용한다.
  • cOOCECOR'S 클래스의 메서드는 STATIC이기 때문에 collectors.a메서드 형식을 사용한다.

 


 

 

class Stu{
	
	String username;
	int grade;
	boolean isMale; //남자냐?
	int age;
	public Stu() {
		// TODO Auto-generated constructor stub
	}
	public Stu(String username, int grade, boolean isMale, int age) {
		this.username = username;
		this.grade = grade;
		this.isMale = isMale;
		this.age = age;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public int getGrade() {
		return grade;
	}
	public void setGrade(int grade) {
		this.grade = grade;
	}
	public boolean isMale() {
		return isMale;
	}
	public void setMale(boolean isMale) {
		this.isMale = isMale;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Stu [username=" + username + ", grade=" + grade + ", isMale=" + isMale + ", age=" + age + "]";
	}
	
}
Stu [] stuArr = { new Stu("홍길동", 3, true, 25),
				 new Stu("이순신", 1, true, 55),
				 new Stu("유관순", 2, false, 18),
				 new Stu("안중근", 3, true, 31),
				 new Stu("홍범도", 1, true, 58),
				 new Stu("강감찬", 3, true, 44)
		 };

 

 

1. 이름만 출력

Arrays.stream(stuArr)
	.map(Stu::getUsername)
	.forEach(System.out::println);
	System.out.println();

//홍길동
//이순신
//유관순
//안중근
//홍범도
//강감찬

 

 

2. 이름만 List에 저장

List<String> list = Stream.of(stuArr).map(Stu::getUsername).collect(Collectors.toList());
	    System.out.println("2. 이름만 List에 저장:" + list);

//2. 이름만 List에 저장:[홍길동, 이순신, 유관순, 안중근, 홍범도, 강감찬]

 

 

3. Map으로 저장 Map<이름, Stu>

Function<Stu, String> keyMapper = new Function<Stu, String>(){
	    	@Override
	    	public String apply(Stu t) {
	    		return t.getUsername();
	    	}
	    };
	    

Function<Stu, Stu> valueMapper = new Function<Stu, Stu>() {
	    	@Override
	    	public Stu apply(Stu t) {
	    		return t;
	    	}
	    };
	    

 Map<String, Stu> m = Stream.of(stuArr).collect(Collectors.toMap(keyMapper, valueMapper));
	    
        Set<String> keys = m.keySet();
	    for(String key : keys) {
	    System.out.println(key + "=" + m.get(key));
	    }
	    
	    
//람다표현식
 Map<String, Stu> m2 = Stream.of(stuArr).collect(Collectors.toMap(Stu::getUsername, t->t));
	    Set<String> keys2 = m2.keySet();
	    for(String key : keys2) {
	    System.out.println(key + "=" + m.get(key));
	    }

//홍범도=Stu [username=홍범도, grade=1, isMale=true, age=58]
//홍길동=Stu [username=홍길동, grade=3, isMale=true, age=25]
//강감찬=Stu [username=강감찬, grade=3, isMale=true, age=44]
//이순신=Stu [username=이순신, grade=1, isMale=true, age=55]
//유관순=Stu [username=유관순, grade=2, isMale=false, age=18]
//안중근=Stu [username=안중근, grade=3, isMale=true, age=31]

 

 

4. 갯수

long count = Stream.of(stuArr).collect(Collectors.counting());
	    System.out.println("4. 갯수: " + count);

//4. 갯수: 6

 

 

5. age 합계

int sum = Stream.of(stuArr).collect(Collectors.summingInt(Stu::getAge));
	    System.out.println("5. 합계: " + sum);

//5. 합계: 231

 

 

6. age 최대값

Optional<Stu> max = Stream.of(stuArr).collect(Collectors.maxBy(Comparator.comparing(Stu::getAge)));
	   
       System.out.println("6. 최대값:" + max.get());
	   System.out.println("6. 최대값:" + max.orElse(null));

//6. 최대값:Stu [username=홍범도, grade=1, isMale=true, age=58]
//6. 최대값:Stu [username=홍범도, grade=1, isMale=true, age=58]

 

 

7. age 최소값

Stu min = Stream.of(stuArr).collect(Collectors.minBy(Comparator.comparing(Stu::getAge))).orElse(null);
	    
        System.out.println("7. 최소값: " + min);

//7. 최소값: Stu [username=유관순, grade=2, isMale=false, age=18]
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함