•
Book.java
package com.assignment;
import lombok.*;
import java.util.Comparator;
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Book {
private String title, author;
private int year, pages;
}
Java
복사
•
BookComparator.java
package com.assignment;
import java.util.Comparator;
import java.util.function.Function;
import java.util.function.ToIntFunction;
public class BookComparator {
// static Comparator<Book> byTitle()
// 제목을 기준으로 정렬
public static Comparator<Book> byTitle() {
// return Comparator.comparing(book -> book.getTitle());
// return Comparator.comparing(Book::getTitle);
return Comparator.comparing(new Function<Book, String>() {
@Override
public String apply(Book book) {
return book.getTitle();
}
});
}
// static Comparator<Book> byAuthor()
// 글쓴이를 기준으로 정렬
public static Comparator<Book> byAuthor() {
// return Comparator.comparing(book -> book.getAuthor());
return Comparator.comparing(Book::getAuthor);
}
// static Comparator<Book> byYear()
// 출판연도를 기준으로 정렬
// public static Comparator<Book> byYear() {
//// return Comparator.comparingInt(book -> book.getYear());
// return Comparator.comparingInt(Book::getYear);
// }
public static Comparator<Book> byYear() {
// return Comparator.comparingInt(book -> book.getYear());
return Comparator.comparingInt(new ToIntFunction<Book>() {
@Override
public int applyAsInt(Book book) {
return book.getYear();
}
});
}
// static Comparator<Book> byPages()
// 총 페이지를 기준으로 정렬
public static Comparator<Book> byPages() {
// return Comparator.comparingInt(book -> book.getPages());
return Comparator.comparingInt(Book::getPages);
}
}
Java
복사
•
BookManager
package com.assignment;
import lombok.Getter;
import java.util.*;
@Getter
public class BookManager {
private List<Book> books;
public BookManager() {
this.books = new ArrayList<Book>();
}
// void addBook(Book book)
// books에 book 추가
public void addBook(Book book) {
books.add(book);
}
// void removeBook(Book book)
// books에 book 제거
public void removeBook(Book book) {
books.remove(book);
}
// void sortBooksBy(Comparator<Book> comparator)
// 해당 comparator에 따라 정렬
public void sortBooksBy(Comparator<Book> comparator) {
// List 컬렉션에 sort 라는 메서드
// sort(Comparator 인터페이스) -> 인터페이스를 추상메소드를 재정의한 메소드가 동작되어 정렬된다.
books.sort(comparator);
}
// Stack<Book> getStack()
// 스택을 생성하여, Books의 book들을 모두 스택에 넣고 반환
public Stack<Book> getStack() {
Stack<Book> stack = new Stack<>();
// for (Book b : books) {
// stack.add(b);
// }
stack.addAll(books);
return stack;
// return (Stack<Book>) books;
}
// Queue<Book> getQueue()
// 큐를 생성하여, Books의 book들을 모두 큐에 넣고 반환
public Queue<Book> getQueue() {
Queue<Book> queue = new LinkedList<>();
// for (Book b : books) {
// queue.add(b);
// }
queue.addAll(books);
return queue;
// return (Queue<Book>) books;
}
// Map<String, Book> getBookMap()
// HashMap을 생성하여, Books의 book들을 모두 맵<제목, Book>에 넣고 반환
public Map<String, Book> getBookMap() {
Map<String, Book> bookMap = new HashMap();
for (Book b : books) {
bookMap.put(b.getTitle(), b);
}
return bookMap;
}
// TreeMap<String, Book> getBookTreeMap()
// TreeMap을 생성하여, Books의 book들을 모두 트리맵<제목, Book>에 넣고 반환
public TreeMap<String, Book> getBookTreeMap() {
TreeMap<String, Book> treeMap = new TreeMap<>();
for (Book b : books) {
treeMap.put(b.getTitle(), b);
}
return treeMap;
}
// TreeSet getBookTreeSet()
// TreeSet을 생성하여, Books의 book들을 모두 트리셋<Book>에 넣고 반환 - TreeSet 방법 1
// public TreeSet<Book> getBookTreeSet() {
// TreeSet<Book> bookTreeSet = new TreeSet<>(Comparator.comparingInt(Book::getPages)); // (b -> b.getPages() 와 동일)
// return bookTreeSet;
// }
// TreeSet 방법 2
// public TreeSet<Book> getBookTreeSet() {
// TreeSet<Book> bookTreeSet = new TreeSet<>(new Comparator<Book>() {
// @Override
// public int compare(Book o1, Book o2) {
// return o1.getTitle().compareToIgnoreCase(o2.getTitle());
// }
// });
// return bookTreeSet;
// }
// TreeSet 방법 3 - 람다식 활용하여 비교
public TreeSet<Book> getBookTreeSet() {
TreeSet<Book> bookTreeSet = new TreeSet<>(((o1, o2) -> o1.getTitle().compareToIgnoreCase(o2.getTitle())));
bookTreeSet.addAll(books);
return bookTreeSet;
}
}
Java
복사
•
BookExample
package com.assignment;
import java.util.*;
public class BookExample {
public static void main(String[] args) {
BookManager bm = new BookManager();
bm.addBook(new Book("언어의 온도", "이기주", 2018, 551));
bm.addBook(new Book("자존감 수업", "윤홍균", 2006, 394));
bm.addBook(new Book("나미야 잡화점의 기적", "히가시노 게이고", 2008, 468));
bm.addBook(new Book("살인자의 기억법", "김영하", 2023, 264));
System.out.println("제목을 기준으로 정렬 합니다.");
bm.sortBooksBy(BookComparator.byTitle());
bm.getBooks().forEach(System.out::println);
System.out.println("\n 작가를 기준으로 정렬 합니다.");
bm.sortBooksBy(BookComparator.byAuthor());
bm.getBooks().forEach(System.out::println);
System.out.println("\n 출판연도를 기준으로 정렬 합니다.");
bm.sortBooksBy(BookComparator.byYear());
bm.getBooks().forEach(System.out::println);
System.out.println("\n 총 페이지 수를 기준으로 정렬 합니다.");
bm.sortBooksBy(BookComparator.byPages());
bm.getBooks().forEach(System.out::println);
Stack<Book> stack = bm.getStack();
System.out.println("\n 스택 출력");
while (!stack.isEmpty()) {
System.out.println(stack.pop());
}
Queue<Book> queue = bm.getQueue();
System.out.println("\n 큐 출력");
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
Map<String, Book> bookMap = bm.getBookMap();
System.out.println("\n 해시맵 출력");
bookMap.values().forEach(System.out::println);
TreeMap<String, Book> bookTreeMap = bm.getBookTreeMap();
System.out.println("\n 트리맵 출력");
bookTreeMap.values().forEach(System.out::println);
TreeSet<Book> bookTreeSet = bm.getBookTreeSet();
System.out.println("\n 트리셋 출력");
bookTreeSet.forEach(System.out::println);
}
}
Java
복사