Backend
home
📚

책 관리 시스템 예제 코드 - 2

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
복사