티스토리 뷰
반응형
Java 8에서 추가된 java.util.stream 패키지를 이용하여 컬렉션의 요소를 람다식으로 처리할 수 있다.
컬렉션을 sort 하기위해 comparable 인터페이스를 구현하는 클래스를 정의할 필요가 없다! 설령 구현한다고 해도 아래와 같이 간략하게 구현할수 있다..
람다식을 안쓴다면
public class ValueComparator implements Comparator<String> {
...
@Override
public int compare(String s1, String s2) {
return map.get(s1).compareTo(map.get(s2));
}
}
혹은
Comparator<Integer> compare = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
};
System.out.println(
compare.compare(1, 2) // -1
);
이렇게 구현할수있는데
람다식 이용하면
Comparator<Integer> compare = (Integer o1, Integer o2) -> {
return o1 - o2
};
혹은
Comparator<Integer> compare2 = (o1, o2) -> o1 - o2;
이렇게 구현할수있다😲
람다식 이용을 살펴보기전에 OCAJP 예제부터 살펴보자.
예제
Given:
public class Vehicle { int vId; String vName; public Vehicle (int vIdArg, String vNameArg){ this.vId = vIdArg; this.vName = vNameArg; } public int getVId(){ return vId; } public String getVName(){ return vName; } public String toString() { return vName; } }
and the code fragment:
List<Vehicle> vehicle = Arrays.asList( new Vehicle(2, "Car"), new Vehicle(3, "Bike"), new Vehicle(1, "Truck")); vehicle.stream()//line n1 .forEach(System.out::print);
Which two code fragments, when inserted at line n1 independently, enable the code to print TruckCarBike?
A. .sorted ((v1, v2) -> v1.getVId() < v2.getVId())
B. .sorted (Comparable.comparing (Vehicle: :getVName)).reversed()
C. .map (v -> v.getVId()).sorted ()
D. .sorted((v1, v2) -> Integer.compare(v1.getVId(), v2.getVid()))
E. .sorted(Comparator.comparing ((Vehicle v) -> v.getVId()))
정답은 D, E이다.
A. Boolean값이 return되며 정렬이 불가하다.
B. comparing 메소드는 Comparator 클래스 메소드이고, reversed 메소드 자체가 없다
C. vid만 필터되기 때문에 123순으로 정렬된다.
D. Integer.compare는 A=B이면 0, A>B이면 1 A<B이면 -1을 리턴한다.
sorted 안에 사용되었으므로 vid를 기준으로 정렬된다.
E. 정답
사용법
Collections.sorted(Comparator())
sorted메소드에 인자로 Comparator 만 넣어주면된다.
위 예제에서 살펴볼수 있듯이 Bifunction을 이용하거나
(v1, v2) -> Integer.compare(v1.getVId(), v2.getVid())
Comparator의 comparing을 이용하여 인자를 넣어주면 된다.
Comparator.comparing ((Vehicle v) -> v.getVId())
반응형
'Language > java' 카테고리의 다른 글
Stream의 foreach 와 for-loop 차이 (0) | 2021.06.24 |
---|---|
람다식 안에서 지역변수 사용하기 (0) | 2021.06.22 |
자바 컬렉션/Java Collection (List, Set, Queue, Map) (0) | 2021.05.25 |
[OCPJP]Java SE 8 Programmer II Certification Exam | 1Z0-809 덤프/DUMP 문제#81~93 (0) | 2021.03.01 |
[OCPJP]Java SE 8 Programmer II Certification Exam | 1Z0-809 덤프/DUMP 문제#61~80 (0) | 2021.03.01 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 백준14501
- script버전
- 백준퇴사
- 프론트엔드
- html꿀팁
- html
- 개발중캐시삭제
- 백준
- 선언적트랜잭션 #noRollbackFor #@Transactional
- C# java 차이점
- 런타임에러
- c#
- 프론트엔드개발자
- 퇴사
- C++
- 캐시삭제
- boj
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함