티스토리 뷰

● 도입

@FunctionalInterface
public interface Comparator<T> {
	int compare(T o1, T o2);
}

반환하는 int가
1. 음수면 o1 < o2
2. 0 이면 o1 = o2
3. 양수면 o1 > o2

 

 

● 실습

package com.fastcampus.functionalprogramming.chapter4.model;

public class User {
	private int id;
	private String name;
	
	public User(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", " + (name != null ? "name=" + name : "") + "]";
	}
}
package com.fastcampus.functionalprogramming.chapter4;

import java.util.ArrayList;
import java.util.List;

import com.fastcampus.functionalprogramming.chapter4.model.User;

public class Chapter4Section5 {
	public static void main(String[] args) {
		List<User> users = new ArrayList<User>();
		users.add(new User(3, "Alice"));
		users.add(new User(1, "Charlie"));
		users.add(new User(5, "Bob"));
		System.out.println(users);
	}
}

결과값 : [User [id=3, name=Alice], User [id=1, name=Charlie], User [id=5, name=Bob]]
[sort method 구조]
    
public static <T> void sort(List<T> list, Comparator<? super T> c) {
	list.sort(c);
}

- List와 Comparator를 넘기면 알아서 sort 해준다.

 

1. 유저들을 id 순서대로 sort 해보자

package com.fastcampus.functionalprogramming.chapter4;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import com.fastcampus.functionalprogramming.chapter4.model.User;

public class Chapter4Section5 {
	public static void main(String[] args) {
		List<User> users = new ArrayList<User>();
		users.add(new User(3, "Alice"));
		users.add(new User(1, "Charlie"));
		users.add(new User(5, "Bob"));
		System.out.println("sort 전");
		System.out.println(users);
		
		// id 순서대로 sort
		Comparator<User> idComparator = (User u1, User u2) -> {
			return u1.getId() - u2.getId();
		};
		Collections.sort(users, idComparator);
		System.out.println("id sort 후");
		System.out.println(users);
	}
}

 

2. 유저들을 name 순서대로 sort 해보자

package com.fastcampus.functionalprogramming.chapter4;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import com.fastcampus.functionalprogramming.chapter4.model.User;

public class Chapter4Section5 {
	public static void main(String[] args) {
		List<User> users = new ArrayList<User>();
		users.add(new User(3, "Alice"));
		users.add(new User(1, "Charlie"));
		users.add(new User(5, "Bob"));
		System.out.println("sort 전");
		System.out.println(users);
		
		// 이름 순서대로 sort
		// compareTo() : string을 비교할 때 사용(알파벳 순으로 정렬)
		// Comparator를 따로 만들지 않고 생성과 동시에 argument로 넣어버린다.
		Collections.sort(users, (u1, u2) -> u1.getName().compareTo(u2.getName()));
		System.out.println("name sort 후");
		System.out.println(users);
	}
}

- 같은 sort method 일지라도 넣어주는 Comparator에 따라 다양한 방법으로 정렬할 수 있다.

'Backend > Java8' 카테고리의 다른 글

#12 Method Reference2  (0) 2022.09.24
#11 Method Reference - 기존에 만들어놓은 Method를 지정하는 방법  (0) 2022.09.23
#9 Predicate  (1) 2022.09.21
#8 BiConsumer  (1) 2022.09.20
#7 Consumer : Supplier와 정반대  (0) 2022.09.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함