Advertisement
dzocesrce

[NP] Book Collection

Apr 21st, 2025
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.97 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.ArrayList;
  9. import java.util.Comparator;
  10. import java.util.List;
  11. import java.util.stream.Collectors;
  12.  
  13. class Book {
  14.     private String title;
  15.     private String category;
  16.     private float price;
  17.  
  18.     public Book(String title, String category, float price) {
  19.         this.title = title;
  20.         this.category = category;
  21.         this.price = price;
  22.     }
  23.  
  24.     public String getTitle() {
  25.         return title;
  26.     }
  27.  
  28.     public String getCategory() {
  29.         return category;
  30.     }
  31.  
  32.     public float getPrice() {
  33.         return price;
  34.     }
  35.  
  36.     @Override
  37.     public String toString() {
  38.         return String.format("%s (%s) %.2f", title, category, price);
  39.     }
  40. }
  41.  
  42.  
  43. class BookCollection {
  44.     private final Comparator<Book> compareByTitleAndPrice = Comparator.comparing(Book::getTitle)
  45.                                                             .thenComparing(Book::getPrice);
  46.     private final Comparator<Book> compareByPriceAndTitle = Comparator.comparing(Book::getPrice)
  47.                                                              .thenComparing(Book::getTitle);
  48.  
  49.     ArrayList<Book> books;
  50.  
  51.     public BookCollection() {
  52.         books = new ArrayList<>();
  53.     }
  54.  
  55.     public void printByCategory(String category) {
  56.         books.stream().filter(b->b.getCategory().equals(category))
  57.                 .sorted(compareByTitleAndPrice)
  58.                 .forEach(System.out::println);
  59.     }
  60.  
  61.     public List<Book> getCheapestN(int n) {
  62.         return books.stream().sorted(compareByPriceAndTitle)
  63.                 .limit(n).collect(Collectors.toList());
  64.     }
  65.  
  66.     public void addBook(Book book) {
  67.         books.add(book);
  68.     }
  69. }
  70. public class BooksTest {
  71.     public static void main(String[] args) {
  72.         Scanner scanner = new Scanner(System.in);
  73.         int n = scanner.nextInt();
  74.         scanner.nextLine();
  75.         BookCollection booksCollection = new BookCollection();
  76.         Set<String> categories = fillCollection(scanner, booksCollection);
  77.         System.out.println("=== PRINT BY CATEGORY ===");
  78.         for (String category : categories) {
  79.             System.out.println("CATEGORY: " + category);
  80.             booksCollection.printByCategory(category);
  81.         }
  82.         System.out.println("=== TOP N BY PRICE ===");
  83.         print(booksCollection.getCheapestN(n));
  84.     }
  85.  
  86.     static void print(List<Book> books) {
  87.         for (Book book : books) {
  88.             System.out.println(book);
  89.         }
  90.     }
  91.  
  92.     static TreeSet<String> fillCollection(Scanner scanner,
  93.             BookCollection collection) {
  94.         TreeSet<String> categories = new TreeSet<String>();
  95.         while (scanner.hasNext()) {
  96.             String line = scanner.nextLine();
  97.             String[] parts = line.split(":");
  98.             Book book = new Book(parts[0], parts[1], Float.parseFloat(parts[2]));
  99.             collection.addBook(book);
  100.             categories.add(parts[1]);
  101.         }
  102.         return categories;
  103.     }
  104. }
  105.  
  106. // Вашиот код овде
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement