Filip_Markoski

[NP] Book Collection

Dec 24th, 2017
519
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.17 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;
  4. import java.util.List;
  5. import java.util.Scanner;
  6. import java.util.Set;
  7. import java.util.TreeSet;
  8. import java.util.stream.Collector;
  9. import java.util.stream.Collectors;
  10.  
  11. public class BooksTest {
  12.     public static void main(String[] args) {
  13.         Scanner scanner = new Scanner(System.in);
  14.         int n = scanner.nextInt();
  15.         scanner.nextLine();
  16.         BookCollection booksCollection = new BookCollection();
  17.         Set<String> categories = fillCollection(scanner, booksCollection);
  18.         System.out.println("=== PRINT BY CATEGORY ===");
  19.         for (String category : categories) {
  20.             System.out.println("CATEGORY: " + category);
  21.             booksCollection.printByCategory(category);
  22.         }
  23.         System.out.println("=== TOP N BY PRICE ===");
  24.         print(booksCollection.getCheapestN(n));
  25.     }
  26.  
  27.     static void print(List<Book> books) {
  28.         for (Book book : books) {
  29.             System.out.println(book);
  30.         }
  31.     }
  32.  
  33.     static TreeSet<String> fillCollection(Scanner scanner,
  34.                                           BookCollection collection) {
  35.         TreeSet<String> categories = new TreeSet<String>();
  36.         while (scanner.hasNext()) {
  37.             String line = scanner.nextLine();
  38.             String[] parts = line.split(":");
  39.             Book book = new Book(parts[0], parts[1], Float.parseFloat(parts[2]));
  40.             collection.addBook(book);
  41.             categories.add(parts[1]);
  42.         }
  43.         return categories;
  44.     }
  45. }
  46.  
  47. class Book {
  48.     String title;
  49.     String category;
  50.     float price;
  51.  
  52.     public Book(String title, String category, float price) {
  53.         this.title = title;
  54.         this.category = category;
  55.         this.price = price;
  56.     }
  57.  
  58.     public String getTitle() {
  59.         return title;
  60.     }
  61.  
  62.     public float getPrice() {
  63.         return price;
  64.     }
  65.  
  66.     public String getCategory() {
  67.         return category;
  68.     }
  69.  
  70.     @Override
  71.     public String toString() {
  72.         /* 1984 (A) 11.30 */
  73.         return String.format("%s (%s) %.2f", title, category, price);
  74.     }
  75. }
  76.  
  77. class BookCollection {
  78.     List<Book> books;
  79.  
  80.     BookCollection() {
  81.         books = new ArrayList<>();
  82.     }
  83.  
  84.     public void addBook(Book book) {
  85.         books.add(book);
  86.     }
  87.  
  88.     public static final Comparator<Book> BOOK_COMPARATOR = Comparator.comparing(Book::getTitle).thenComparing(Book::getPrice);
  89.  
  90.     public void printByCategory(String category) {
  91.         books.stream()
  92.                 .filter(book -> book.category.toLowerCase().equals(category.toLowerCase()))
  93.                 .sorted(BOOK_COMPARATOR)
  94.                 .forEach(System.out::println);
  95.     }
  96.  
  97.     public List<Book> getCheapestN(int n) {
  98.         if (n > books.size()) return books;
  99.         return books.stream()
  100.                 .sorted(Comparator.comparing(Book::getPrice).thenComparing(Book::getTitle))
  101.                 .limit(n)
  102.                 .collect(Collectors.toList());
  103.     }
  104. }
  105.  
  106. /*
  107. Да се напише класа за книга  во која се чува:
  108.  
  109. наслов
  110. категорија
  111. цена.
  112. Да се имплементира конструктор со следните аргументи .
  113.  
  114. Потоа да се напише класа BookCollection во која се чува колекција од книги. Во оваа класа треба да се имплментираат следните методи:
  115.  
  116. public void addBook(Book book) - додавање книга во колекцијата
  117. public void printByCategory(String category) - ги печати сите книги од проследената категорија (се споредува стрингот без разлика на мали и големи букви), сортирани според насловот на книгата (ако насловот е ист, се сортираат според цената).
  118. public List<Book> getCheapestN(int n) - враќа листа на најевтините N книги (ако има помалку од N книги во колекцијата, ги враќа сите).
  119.  */
Advertisement
Add Comment
Please, Sign In to add comment